首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使QDial对与预定义的鼠标事件不同的事件作出反应?

如何使QDial对与预定义的鼠标事件不同的事件作出反应?
EN

Stack Overflow用户
提问于 2016-10-18 12:42:51
回答 1查看 539关注 0票数 3

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

这是一张我想要达到的目标的图片(小心,MS的绘画技巧)。在左边,是基本的行为,在右边,是我想要的行为。

我看不出我怎么能用mousePressEventmouseMoveEvent做到这一点。有谁有主意吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-18 13:15:33

除非我误解了你想要的东西,否则你应该直截了当地说.

代码语言:javascript
复制
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,则可以使用有状态事件筛选器实现相同的逻辑。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40108623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档