使QWidget的一部分可拖动

时间:2012-10-31 20:08:40

标签: qt user-interface drag-and-drop draggable

我有一个可以

的USB设备
  • 沿线性轴“移动”
  • 停在目标位置,
  • 报告其立场,
  • 报告其目标,
  • 由主机应用程序设置其目标。

现在我想创建一个可用于指示位置和目标的小部件,但我也希望目标指示器可以用鼠标拖动。到目前为止我所完成的是指示部分,它看起来像这样:

enter image description here

黑色,填充三角形是位置;目标指标为绿色。

我想要的是能够拖动目标指示器。在完成此操作时,应使用当前目标指标的值更新设备的目标。我是gui编程的新手(直到现在我只关注USB的东西;这是我的第一个自定义小部件),我不知道如何实现这一点。

将目标指标作为小部件的一部分,或者它应该是某种孩子,这是一个好主意吗?我很确定这种工作有共同的模式,但我不知道找到它们的正确关键字。谷歌搜索“QWidget拖”这样的东西只会导致我拖放功能,这不是我需要的。

1 个答案:

答案 0 :(得分:1)

我认为你不应该打扰儿童小部件。在主QWidget中,您只需要覆盖三个虚拟保护功能:

QWidget::mousePressEvent - 这应该检查用户是否点击了目标指标,如果是,则将bool“clickedOnIndicator”设置为true(并接受鼠标事件);否则将bool设置为false,忽略鼠标事件,并调用默认实现

QWidget::mouseMoveEvent - 首先检查clickedOnIndicator是否为真;如果是这样,将指示器移动到新位置并发出信号YourWidget::indicatorMoved(int),否则调用默认实现

QWidget::paintEvent - 将指标绘制在正确的位置(并在油漆事件中做任何其他事情)