Qt4:如何为新实例更改 QSpinBox 的默认值(范围、值、单步长)?

Qt4: How to change the default values (range, value, single step size) for QSpinBox for new instances?

我在我的项目(使用 Qt 4.8.0)中使用了很多 QDoubleSpinBoxes,并且对于所有这些,我想要相同的范围、单步长、值等,这与默认值不同不过

我想问:有没有办法更改这些默认值,以便使用新的默认值创建 QSpinBoxes 的新实例,这样我就不会每次都更改?

简单的说,而不是这个:

QDoubleSpinBox *spin1 = new QDoubleSpinBox(this);
spin1->setSingleStep(0.03);
spin1->setDecimals(4);
spin1->setRange(2.0, 35.0);

QDoubleSpinBox *spin2 = new QDoubleSpinBox(this);
spin2->setSingleStep(0.03);
spin2->setDecimals(4);
spin2->setRange(2.0, 35.0);

...

我想要这样的东西:

QDoubleSpinBox::setDefaultSingleStep(0.03);
QDoubleSpinBox::setDefaultDecimals(4);
QDoubleSpinBox::setDefaultRange(2.0, 35.0);

QDoubleSpinBox *spin1 = new QDoubleSpinBox(this);
QDoubleSpinBox *spin2 = new QDoubleSpinBox(this);

有谁知道这是否可行,如果可行,如何实现?

您应该从 QDoubleSpinBox 中创建自己的新 class。在您的 class 构造函数中,设置您想要的值。

您可以创建一个工厂,创建具有所需值的旋转框。

例如

class MySpinBoxFactory {
public:
   MySpinboxFactory(double singleStep, int decimals, double rangeMin, double rangeMax)
   : m_singleStep(singleStep), m_decimals(decimals), m_rangeMin(rangeMin), m_rangeMax(rangeMax) {}

   QDoubleSpinBox *createSpinBox(QWidget *parent = NULL) {
      QDoubleSpinBox *ret = new QDoubleSpinBox(parent);
      ret->setSingleStep(m_singleStep);
      ret->setDecimals(m_decimals);
      ret->setRange(m_rangeMin, m_rangeMax);
      return ret;
   }
private:
   double m_singleStep;
   int m_decimals;
   double m_rangeMin;
   double m_rangeMax;
}

// ...
MySpinboxFactory fac(0.03, 4, 2.0, 35.0);
QDoubleSpinBox *spin1 = fac.createSpinBox(this);
QDoubleSpinBox *spin2 = fac.createSpinBox(this);

您还可以添加设置器来更改值。有了这个,您可以使用单个工厂实例创建具有不同默认值的旋转框。

MySpinboxFactory fac(0.03, 4, 2.0, 35.0);
QDoubleSpinBox *spin1 = fac.createSpinBox(this);
QDoubleSpinBox *spin2 = fac.createSpinBox(this);

fac.setSingleStep(0.1);
QDoubleSpinBox *spin3 = fac.createSpinBox(this);