Qt наследует QSpinBox и QPushButton

Я хотел бы создать свой CustomQSpinBox .

Этот 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();

};

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

ошибка: C2594: 'static_cast': неоднозначное преобразование из 'QObject *' в 'CustomQSpinBox *'

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


person artoon    schedule 04.06.2013    source источник
comment
почему именно вы наследуете от двух классов (оба происходят из QObject, что дает вам вашу ошибку... проблема с бриллиантами en. wikipedia.org/wiki/Multiple_inheritance )? Вам нужно только получить от самого QSpinBox (или, если быть точным, один класс CustomSpinBox, унаследованный от QSpinBox, и один CustomPushButton от QPushButton, если требуется)   -  person Najzero    schedule 04.06.2013
comment
Мне нужно знать, когда пользователь нажимает на QSpinBox. QSpinBox имеет ButtonSymbols = noButton   -  person artoon    schedule 04.06.2013
comment
тогда вы можете полностью положиться на стандартные объекты QObject и использовать систему сигналов/слотов qt (установите сигнал valueChanged() в желаемый слот). См. сигналы qt-project.org/doc/qt-4.8/qspinbox.html здесь и описание сигнала/слота здесь: qt-project.org/doc/qt-4.8/signalsandslots.html   -  person Najzero    schedule 04.06.2013
comment
QSpinBox доступен только для чтения, и когда я нажимаю, он открывает цифровую клавиатуру. Поэтому я не могу использовать значениеChanged.   -  person artoon    schedule 04.06.2013
comment
и ваш numPad выполняет setValue() на вашем (только для чтения) QSpinBox? setValue() will emit valueChanged() if the new value is different from the old one. (предупреждение: если вы откажетесь, я, скорее всего, спрошу, почему вы вообще используете этот спинбокс)   -  person Najzero    schedule 04.06.2013


Ответы (1)


Да, когда 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;

};
person artoon    schedule 04.06.2013