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);
我在我的项目(使用 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);