gpt4 book ai didi

c++ - 如何让我的 QDial 对不同于预定义鼠标事件的鼠标事件使用react?

转载 作者:太空狗 更新时间:2023-10-29 21:36:28 25 4
gpt4 key购买 nike

我有一个 QDial 的子类,我想通过上下移动鼠标来更改值。目前,基本实现允许您使用鼠标进行圆周运动以更改值。但我想通过向上移动鼠标(假设按下拨号盘后,我会将鼠标移动到屏幕顶部)或向下移动鼠标来更改它们(到屏幕底部)。

这是一张我想要实现的图片(请注意,提前使用 MS Paint 技能)。左边是基本行为,右边是我想要的行为。

enter image description here

我不知道如何使用 mousePressEventmouseMoveEvent 获得它。有人有想法吗?

最佳答案

除非我误解了你想要什么,否则这应该是相当直接的,比如...

class dial: public QDial {
public:
dial (QWidget *parent = nullptr)
: QDial(parent)
, m_dragging(false)
, m_scale_factor(1.0f)
{}
protected:
virtual void mousePressEvent (QMouseEvent *event) override
{
m_mouse_press_point = event->pos();
m_dragging = true;
m_base_value = value();
}
virtual void mouseReleaseEvent (QMouseEvent *event) override
{
m_dragging = false;
}
virtual void mouseMoveEvent (QMouseEvent *event) override
{
if (m_dragging) {
int new_value = m_base_value + m_scale_factor * (m_mouse_press_point.y() - event->y());
setValue(new_value);
}
}
private:
bool m_dragging;
QPoint m_mouse_press_point;
int m_base_value;
float m_scale_factor;
};

您可能需要根据屏幕分辨率或类似分辨率调整 m_scale_factor

如果您不想子类化 QDial,则可以使用有状态事件过滤器实现相同的逻辑。

关于c++ - 如何让我的 QDial 对不同于预定义鼠标事件的鼠标事件使用react?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40108623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com