2013-06-04 4 views
1

Я хотел бы создать свой CustomQSpinBox.Qt inherit QSpinBox и QPushButton

Этот CustomQSpinBox должен наследоваться от QPushButton и QSpinBox , но когда я скомпилировать этот код:

#include <QSpinBox> 
#include <QPushButton> 

class CustomQSpinBox : public QSpinBox, public QPushButton 
{ 
    Q_OBJECT 

public: 
    CustomQSpinBox (QWidget *parent = 0); 
    ~CustomQSpinBox(); 
    void initMinMax(int min, int max); 
    void init(); 

signals: 
    void needNumpad(); 

public slots: 
    void clicked(); 

}; 

Я получаю сообщение об ошибке:

ERREUR: C2594: «static_cast'ÿ: преобразование ambigu ‰ s-де 'QObject *' ан 'CustomQSpinBox *

Как я должен сделать мое наследство?

+0

почему именно вы унаследованы из двух классов (как происходящий от QObject, давая вам свою ошибку ... «проблемы с бриллиантом» HTTP: //en.wikipedia .org/wiki/Multiple_inheritance)? Вы должны получить только из QSpinBox (или, если быть точнее, один класс CustomSpinBox, унаследованный от QSpinBox и один CustomPushButton из QPushButton, если это необходимо) – Najzero

+0

Мне нужно знать, когда пользователь нажимает QSpinBox. QSpinBox имеет ButtonSymbols = noButton – artoon

+0

, тогда вы можете полностью полагаться на стандартные QObjects и использовать систему сигналов/слотов qt (установить сигнал valueChanged() в слот вашего желания). См. Сигналы http://qt-project.org /doc/qt-4.8/qspinbox.html здесь и сигнал/слот, объясненный здесь: http://qt-project.org/doc/qt-4.8/signalsandslots.html – Najzero

ответ

0

Да, когда numPad закрыто, значение устанавливается в QSpinBox. Проблема заключается в том, чтобы открыть numPad, когда я нажимаю на QSpinBox.

На данный момент я управляю с этим кодом:

#include <QSpinBox> 
#include <QPushButton> 
#include <QMoveEvent> 
#include <QResizeEvent> 

class CustomQSpinBox: public QSpinBox 
{ 
    Q_OBJECT 

public: 
    CustomQSpinBox(QWidget *parent = 0); 
    ~CustomQSpinBox(); 

    void resizeEvent(QResizeEvent *event); 
    void moveEvent(QMoveEvent * event); 

signals: 
    void needNumpad(); 

public slots: 
    void clicked(); 

private: 
    QPushButton * button; 

};