如何通过拖放的方式获取鼠标下QLayout中的widget?

How to get the widget in QLayout under the mouse by Drag&drop?

我构建了一个接受拖放的小部件,如下所示:

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)。我现在该怎么办?

Layouts 做不到,还好the parent widget can。示例代码(未经测试):

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