3

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

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

4

1 回答 1

1

您需要重新实现要在其上拖动或安装事件过滤器的小部件的方法mousePressEventmouseMoveEvent方法。 存储光标位置并将小部件移动到光标从按下点移动的距离。不要忘记清除. 确切的代码取决于您希望小部件在被拖动时的外观以及在拖放小部件时其他小部件的行为方式。在最简单的情况下,它将如下所示:mouseReleaseEvent
mousePressEventmousePressEventmouseReleaseEvent

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;
}
于 2014-07-30T07:36:05.410 回答