如何通过拖放的方式获取鼠标下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) {
....
}
我构建了一个接受拖放的小部件,如下所示:
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) {
....
}