簡體   English   中英

如何讓我的QDial對不同於預定義的鼠標事件作出反應?

[英]How can I make my QDial react to a different mouse event than the one predefined?

我有一個QDial的子類,我想通過上下移動鼠標來更改值。 目前,基本實現允許您使用鼠標進行圓周運動來更改值。 但是我想通過向上移動鼠標來改變它們(讓我們說一旦我按下我的表盤,我將鼠標移動到我的屏幕頂部) 或向下移動 (到屏幕的底部)。

這是我想要實現的圖片(要注意,MS Paint技能未來)。 在左邊,這是基本行為,在右邊,是我想要的行為。

在此輸入圖像描述

我不知道如何使用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則可以使用有狀態事件過濾器實現相同的邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM