这似乎是一件很平常的事情,我确信我错过了一些显而易见的事情。我想要一个小部件,根据用户拖动的东西提供二维信息。在我看来,这是一个操纵杆,但这个非常普遍的color picker传达了相同的概念。我可以基于图像和点击事件来构建窗口小部件,但似乎应该有一种更简单的方法来将这些功能拼凑在一起而不需要那么多工作。任何想法?
编辑: 什么是被移动并不重要。在最简单的情况下,用户只需点击一个正方形,就可以根据点击位置设置两个滑块(一个垂直和一个水平)。
EDIT2: 我希望从用户那里获得实时信息来控制系统,例如速度和方向。用户通过操纵杆类型系统传达此信息更直观,更快捷。到目前为止,前进产生速度,同时左右产生方向。否则,用户必须向左拖动一些移动到另一个滑块,向上拖动等等。这就是为什么在游戏控制器和RC电子设备中传达二维信息的原因。我只是在寻找一个与之相关的小部件。
答案 0 :(得分:1)
制作QWidget
。
设置其最小尺寸。
实施鼠标事件。 (如果你正在使用新的触摸事件,请确保你也处理它们。)
然后在鼠标拖动或鼠标按下时,根据鼠标事件位置的y部分调整垂直刻度,并根据鼠标事件位置的x部分调整水平刻度。
如果要在单击或拖动开始之前预览或标记单击将执行的操作,您将需要实现mouseMove事件,并且还要为您的窗口小部件实现enableMouseTracking
。
将信息发送到相关小部件。
制作一个paintEvent,以最有意义的方式表示信息,包括印刷文字,更改颜色,更改圆圈等等。
或者,如果您不希望输入窗口小部件显示信息更改,而是显示附近的窗口小部件以反映它,请连接到它,并设置它的事件来处理它。
制作这种输入设备不应该花太长时间。最难的部分可能是决定在发生点击或拖动或完成时要做什么。
此外,如果您正在创建一种模拟操纵杆,它们通常在中间有一个死区。因此,您可以检查它是否足够接近零位置。
如果您希望它的行为类似于弹簧加载的操纵杆,那么每次放开小部件时,您都可以让它开始动画回原位。
希望有所帮助。