drag-and-drop - 如何拖放自定义小部件?

标签 drag-and-drop qt5 qwidget qt4.8 qt5.1

我已经创建了自己的自定义小部件,我希望支持小部件的内部拖放。

我在垂直框布局中添加了 4 个自定义小部件。现在我想在内部拖放自定义小部件。更清楚地说,如果我拖动最后一个小部件并将其放在第一个位置,那么第一个小部件必须移动到第二个位置,最后一个小部件(被拖动)必须移动到第一个位置。 (与在 ListView 中拖放项目相同)。谁能建议我一种拖放自定义小部件的方法。 enter image description here

最佳答案

您需要重新实现要拖动的小部件的 mousePressEventmouseMoveEventmouseReleaseEvent 方法或在它们上安装事件过滤器。< 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/

相关文章:

ios - 拖放 - 从我的模型创建一个 NSItemProvider

c++ - qInstallMessageHandler成功,但子线程看不到

用于禁用小部件的 QtQuick 调色板

qt - 如何为 QListView 实现可点击的小部件?

c++ - 如何在 qt5 上绘制 QDialog 的插入符号/箭头底部

Android 在 Canvas 中拖放/旋转位图

javascript - 如何在html拖放上设置自定义数据

javascript - 鼠标快速移动时在谷歌地图上拖动标记中断

windows - qt 5.2.0 windows 7 缺少 dll(程序崩溃)

c++ - QLayout 和 QWidget 之间的转换