如何在QDoubleSpinBox中为单个步骤提供多个值

  • 本文关键字:单个步 QDoubleSpinBox qt qt5
  • 更新时间 :
  • 英文 :


我正在使用单步长值为1.0的QT QDouleSpinBox

当我更改值时,它每个增量都会更改 1。

当我按住 Control 键并更改值时,每个增量都是 10.0

现在我想添加 Alt 键并将每个增量更改 0.1 ,我该怎么做?

我正在尝试使用此类在QT设计器中推广QDoubleSpinBox小部件。

如何实现步数函数?

#pragma once
#include< QDoubleSpinBox>
class spinboxsumit : public  QDoubleSpinBox
{
Q_OBJECT
public:
spinboxsumit(QWidget * parent = 0);
void stepBy(double steps);
};
/////////////////////////////////////////////////////////////////////////////////////////////////
#include "spinboxsumit.h"
spinboxsumit::spinboxsumit(QWidget * parent) : QDoubleSpinBox( parent)
{
}

void spinboxsumit::stepBy(double steps)
{

}

好问题。考虑到可用修饰键的数量,更灵活的内容会很好!没有什么"内置"的。我看到您正在尝试重新实现自定义版本...这也是我的想法。

这是我能想到的(几乎(最简单的版本。 顺便说一句,由于某种原因,ALT修饰符对我(Win7(和鼠标滚轮不起作用(根本没有调整,即使有"库存"旋转框(,所以我在这里使用SHIFT作为测试的修饰符。(不知道为什么 Alt+wheel 不起作用,可能只是我的系统。

#include <QDoubleSpinBox>
#include <QApplication>
class DoubleBox : public QDoubleSpinBox
{
Q_OBJECT
public:
using QDoubleSpinBox::QDoubleSpinBox;  // inherit c'tors
// re-implement to keep track of default step (optional, could hard-code step in stepBy())
void setSingleStep(double val)
{
m_defaultStep = val;
QDoubleSpinBox::setSingleStep(val);
}
// override to adjust step size
void stepBy(int steps) override
{
// set the actual step size here
double newStep = m_defaultStep;
if (QApplication::queryKeyboardModifiers() & Qt::ShiftModifier)
newStep *= 0.1;
// be sure to call the base setSingleStep() here to not change m_defaultStep.
QDoubleSpinBox::setSingleStep(newStep);
QDoubleSpinBox::stepBy(steps);
}
private:
double m_defaultStep = 1.0;
};

还有一个快速测试:

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDialog d;
d.setLayout(new QVBoxLayout);
d.layout()->addWidget(new DoubleBox(&d));
return d.exec();
}
#include "main.moc"

更进一步,可以重新实现更完整的stepBy(int)版本(当前源(,或者通过重新实现滚轮/键事件在较低级别。

相关内容

  • 没有找到相关文章

最新更新