【问题标题】:Something like a joystick in PyQtPyQt 中的操纵杆之类的东西
【发布时间】:2014-04-08 04:22:05
【问题描述】:

这似乎是一件很常见的事情,我确信我错过了一些明显的东西。我想要一个基于用户拖动的东西提供二维信息的小部件。在我看来,这是一个操纵杆,但这个很常见的color picker 传达了相同的概念。我可以基于图像和单击事件构建小部件,但似乎应该有一种更简单的方法来将这些功能拼凑在一起而无需太多工作。有什么想法吗?

编辑: 移动什么并不重要。在最简单的情况下,用户只需单击一个正方形,然后可以根据单击位置设置两个滑块(一个垂直和一个水平)。

编辑2: 我想从用户那里获取实时信息来控制系统,例如速度和方向。用户使用操纵杆型系统传达此信息更加直观和快捷。到目前为止,前进产生速度,同时左右产生方向。否则用户必须向左拖动一些移动到另一个滑块,向上拖动等等。这就是为什么在游戏控制器和 RC 电子设备中传达二维信息的原因。我只是在寻找与此相关的小部件。

【问题讨论】:

  • 什么信息,拖着什么?不管你是什么意思,我认为它需要定制绘画。
  • 你想用这个小部件表示什么具体信息?如果您要设置两个滑块,那么为什么不让用户自己移动滑块来设置 x 和 y?
  • 鉴于您更新的描述,建议的小部件似乎非常专业 - 或者无论如何不是“常见的东西”,正如您所说,这解释了为什么它不是 Qt 提供的通用小部件集的一部分.所以我想您将不得不实施自己的解决方案(或寻找第三方解决方案)。

标签: qt user-interface pyqt4


【解决方案1】:

创建一个QWidget

设置其最小尺寸。

实现它的鼠标事件。 (如果您正在使用新的触摸事件内容,请确保您也处理这些内容。)

然后在鼠标拖动或按下鼠标时,根据鼠标事件位置的 y 部分调整垂直比例,并根据鼠标事件位置的 x 部分调整水平比例。

如果您想在单击或拖动开始之前预览或标记单击将执行的操作,则需要实现 mouseMove 事件,并为您的小部件实现 enableMouseTracking

将信息发送到相关的小部件。

制作一个以最有意义的方式表示信息的paintEvent,包括打印文本、更改颜色、更改大小的圆圈等。

或者,如果您不希望您的输入小部件显示信息的变化,而是希望附近的小部件来反映它,请连接到它,并设置它的事件来处理它。

制作这种输入设备应该不会花费太长时间。最困难的部分可能是决定当点击或拖动发生或完成时要做什么。

此外,如果您正在创建一种模拟操纵杆,它们通常在中间有一个死区。所以你可以检查一下它是否足够接近零位。

如果您希望它表现得像弹簧加载的操纵杆,您可以让它开始动画回到其初始位置,每次您松开小部件时。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多