2016-02-29 21 views
0

Я использую много QDoubleSpinBoxes в моем проекте (с Qt 4.8.0), и для всех из них я хочу один и тот же диапазон, размер одного шага, значение и т. Д., Которые отличаются от значений по умолчанию.Qt4: Как изменить значения по умолчанию (диапазон, значение, размер одного шага) для QSpinBox для новых экземпляров?

Я хотел спросить: есть ли способ изменить эти значения по умолчанию, чтобы новые экземпляры 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); 

Кто-нибудь знает, если это возможно, и если да, то как?

+2

Возможно, самый простой способ для вас - подкласс QDoubleSpinBox и установить новые значения по умолчанию в конструкторе нового класса? – johngull

ответ

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); 
1

Вы должны создать свой собственный новый класс, полученный из QDoubleSpinBox. В своем конструкторе классов задайте нужные значения.

 Смежные вопросы

  • Нет связанных вопросов^_^