如何通过拖放获取鼠标下QLayout中的小部件?
Posted
技术标签:
【中文标题】如何通过拖放获取鼠标下QLayout中的小部件?【英文标题】:How to get the widget in QLayout under the mouse by Drag&drop? 【发布时间】: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:谢谢,我只是太专注于布局,忘记了父窗口小部件:) 【参考方案1】:布局无法做到这一点,但幸运的是the parent widget can。示例代码(未经测试):
void MyWidget::dragMoveEvent( QDragMoveEvent *p_event )
auto *widget = childAt(p_event->pos());
if(widget)
....
【讨论】:
以上是关于如何通过拖放获取鼠标下QLayout中的小部件?的主要内容,如果未能解决你的问题,请参考以下文章