Как получить виджет в QLayout под мышкой с помощью Drag & drop? - PullRequest
1 голос
/ 20 апреля 2020

Я создаю виджет, который принимает перетаскивание следующим образом:

MyWidget::MyWidget( QWidget *p_parent ) : QFrame( p_parent )
{
    setAcceptDrops( true );
    m_layout = new QLayout( this );  //this is layout of my custom widget
    layout->setSpacing( 0 );

    m_indicator = new QWidget( this );
    m_indicator->setObjectName( "indicator" );
    m_indicator->setFixedWidth( 5 );
    layout->addWidget( m_indicator );
    ....
    ....
 }

 void MyWidget::dragMoveEvent( QDragMoveEvent *p_event )
 {
    p_event->acceptProposedAction();
 }

Моя основная задача - вставить перетаскиваемый объект в макет, поэтому я должен определить, какой элемент находится под мышью, и выполнить мои действия. работа после этого. В функции dragMoveEvent выше, я могу сделать p_event->pos(), чтобы получить положение мыши. Но QLayout не имеет метода itemAt(int x, int y). Что мне теперь делать?

1 Ответ

1 голос
/ 20 апреля 2020

Макеты не могут этого сделать, но, к счастью, родительский виджет может . Пример кода (не проверено):

void MyWidget::dragMoveEvent( QDragMoveEvent *p_event )
 {
    auto *widget = childAt(p_event->pos());
    if(widget) {
        ....
 }
...