【问题标题】:How to get the widget in QLayout under the mouse by Drag&drop?如何通过拖放获取鼠标下QLayout中的小部件?
【发布时间】:2020-08-03 03:03:05
【问题描述】:

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

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

【问题讨论】:

  • @hyde:谢谢,我只是太专注于布局,忘记了父窗口小部件:)

标签: qt drag-and-drop


【解决方案1】:

布局无法做到这一点,但幸运的是the parent widget can。示例代码(未经测试):

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

【讨论】:

    猜你喜欢
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多