QDoubleSpinBox 在 Qt 5 中带有鼠标滚动信号?

QDoubleSpinBox with mouse scroll signal in Qt 5?

我正在使用 Qt 5。我有一个 QDoubleSpinBox,当我用鼠标悬停在它上面时,每次滚动都会从当前值 increase/decrease 1。我想要的是重新定义滚动事件并为其设置规则。例如,如果当前值为 1,我想在向下滚动时将步长设置为 0.2 而不是 1,因此它会像 1->0.8->0.6->0.4.

这就是我连接信号和槽的方式。

connect(MyPreview.mySpinBox, SIGNAL(wheelEvent()), this, SLOT(slotSpinBoxWheelEvent()) )

slotSpinBoxWheelEvent 函数将处理自定义规则,我只需要我的旋转框检测鼠标滚动信号,但 Qt 文档列出 QDoubleSpinBox class 没有 wheelEvent信号。我做错了什么吗?

没有wheelEvent这样的信号,它是基础classQWidget中的受保护方法,您可以在派生的class:[=20中重新实现它=]

class MySpinBox : public QDoubleSpinBox {
   // ...
   void wheelEvent (QWheelEvent* e) {
      // do sth here
   }
};

如果你想在 [0.0, 1.0] 范围内获得步骤 0.2 你应该使用 QDoubleSpinBox class.[=20 的 setRangesetSingleStep 方法=]

QDoubleSpinBox* sb = new QDoubleSpinBox();
sb->setRange (0.0, 1.0);
sb->setSingleStep (0.2);

现在,当滚动旋转框时,您只能获得 6 个值(0、0.2、0.4 等)。

编辑

所以使用 value() 方法检查 SpinBox 的当前值,如果该值小于 1.0,则将 singleStep 设置为 0.2,否则设置为 1.0

void wheelEvent (QWheelEvent* e)
{
    QDoubleSpinBox::wheelEvent (e);

    if (value() >= 1.0)
    {
        // additinal code to check is singleStop is not 1.0
        this->setSingleStep (1.0);
    }
    else
    {
        // additionl code to avoid overriding 0.2 value 
        this->setSingleStep (0.2);
    }
}