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 的 setRange
和 setSingleStep
方法=]
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);
}
}
我正在使用 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 的 setRange
和 setSingleStep
方法=]
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);
}
}