2014-03-05 29 views
1

这似乎是这样一个常见的事情,我相信我错过了一些明显的东西。我想要一个基于用户拖动的东西提供2维信息的小部件。在我看来,这是一款游戏杆,但这种非常普遍的color picker表达了相同的概念。我可以基于图像构建小部件并单击事件,但似乎应该有一种更简单的方法来在不需要太多工作的情况下拼凑这些功能。有任何想法吗?PyQt中的操纵杆之类的东西

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

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

+0

什么信息,拖着什么?无论你是什么意思,它都需要我认为自定义绘画。 –

+0

你试图用这个小部件来表示什么特定的信息?如果您要设置两个滑块,那么为什么不让用户自己移动滑块来设置x和y? – ekhumoro

+0

鉴于您的更新描述,所提议的小部件看起来相当专业 - 或者不管怎么说都不是“普通的东西”,正如您所说的,这解释了为什么它不是Qt提供的通用小部件集的一部分。所以我想你将不得不实施你自己的解决方案(或寻找第三方解决方案)。 – ekhumoro

回答

1

设为QWidget

设置其最小尺寸。

实施其鼠标事件。 (如果你正在使用新的触摸事件的东西,请确保你也处理这些东西。)

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

如果要在点击或拖动开始之前预览或标记点击操作,您需要实现mouseMove事件,并且还需要为您的小部件实现enableMouseTracking

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

做,它代表了最有意义的方式,信息的paintEvent,无论是与印刷文本,改变颜色,圆大小的改变等

或者,如果你不想让你的输入窗口小部件显示信息的变化,但附近的小部件反映它,连接到它,并设置它的事件来处理它。

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

另外,如果您正在创建一种模拟操纵杆,它们通常在中间会有一个死区。所以你可以投入一张支票来看它是否足够接近零位。

如果你想要它像一个弹簧加载的操纵杆,你可以让它开始动画回到它的原始位置,每次你放开小部件。

希望有所帮助。