0

我有一个 USB 设备可以

  • 沿线性轴“移动”,
  • 停在一个目标上,
  • 报告其位置,
  • 报告其目标,
  • 由主机应用程序设置其目标。

现在我想创建一个可以用来指示位置和目标的小部件,但我还希望目标指示器可以用鼠标拖动。到目前为止,我完成的是指示部分,如下所示:

在此处输入图像描述

黑色实心三角形是位置;目标指示灯为绿色。

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

将目标指示器作为小部件的一部分保留是个好主意,还是应该是某种子项?我很确定这种工作有一些共同的模式,但我不知道找到它们的正确关键字。谷歌搜索“QWidget drag”之类的东西只会让我找到拖放功能,这并不是我所需要的。

4

1 回答 1

1

我认为您不应该打扰子小部件。在您的主 QWidget 中,您只需要覆盖三个虚拟保护函数:

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

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

QWidget::paintEvent-- 在正确的位置绘制指示器(并执行您在绘制事件中所做的任何其他事情)

于 2012-10-31T20:18:47.873 回答