我已经创建了自己的自定义小部件,我希望支持小部件的内部拖放。
我在垂直框布局中添加了 4 个自定义小部件。现在我想在内部拖放自定义小部件。更清楚地说,如果我拖动最后一个小部件并将其放在第一个位置,那么第一个小部件必须移动到第二个位置,最后一个小部件(被拖动)必须移动到第一个位置。 (与在 ListView 中拖放项目相同)。谁能建议我一种拖放自定义小部件的方法。
最佳答案
您需要重新实现要拖动的小部件的 mousePressEvent
、mouseMoveEvent
和 mouseReleaseEvent
方法或在它们上安装事件过滤器。< br/>
将光标位置存储在 mousePressEvent
中,并将 mousePressEvent
中的小部件移动到光标从按下点移动的距离。不要忘记在 mouseReleaseEvent
中清除光标位置。确切的代码取决于您希望小部件在被拖动时的外观以及其他小部件在拖/放小部件时的行为方式。在最简单的情况下,它看起来像这样:
void mousePressEvent(QMouseEvent* event)
{
m_nMouseClick_X_Coordinate = event->globalX();
m_nMouseClick_Y_Coordinate = event->globalY();
};
void mouseMoveEvent(QMouseEvent* event)
{
if (m_nMouseClick_X_Coordinate < 0)
return;
const int distanceX = event->globalX() - m_nMouseClick_X_Coordinate;
const int distanceY = event->globalY() - m_nMouseClick_Y_Coordinate;
move(x() + distanceX, y() + distanceY());
};
void mouseReleaseEvent(QMouseEvent* event)
{
m_nMouseClick_X_Coordinate = -1;
}
关于drag-and-drop - 如何拖放自定义小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20453308/