0

我在我的项目中使用了很多 QDoubleSpinBoxes(使用 Qt 4.8.0),对于所有这些,我想要相同的范围、单步大小、值等,尽管它们与默认值不同。

我想问:有没有办法更改这些默认值,以便使用新的默认值创建 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);

有谁知道这是否可行,如果可以,怎么办?

4

2 回答 2

3

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

例如

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);
于 2016-02-29T15:13:55.053 回答
1

您应该从 QDoubleSpinBox 派生您自己的新类。在您的类构造函数中,设置您想要的值。

于 2016-02-29T15:05:49.387 回答