Я относительно новичок в программировании с Qt и задал вопрос. Краткая версия:
Как наследовать сигналы, определенные в суперклассах?
Я пытаюсь подклассифицировать кого-то еще красиво сделанные QTWidgets, чтобы изменить некоторые из поведения по умолчанию:
//Plot3D is a QWidget that defines a signal "rotationChanged" class matLinePlot : public QObject, public Plot3D { Q_OBJECT; //etc... public: //etc... //Catch Plot3D signal "rotationChanged" and do some magic with it: void initPlot(){ QObject::connect(this, SIGNAL(rotationChanged( double , double , double )), this, SLOT(myRotationChanged(double, double, double))); } };
Проблема заключается в строке QObject:: connect. То, что я хотел бы сделать, - подключить rotationChanged SIGNAL (от qwt3D_plot.h) к локальной функции /SLOT - "myRotationChanged". Однако всякий раз, когда я это делаю, во время выполнения я получаю:
Объект:: connect: нет такого сигнала matLinePlot:: rotationChanged (double, double, double)
в C:...\matrixVisualization.h. Конечно, я знаю, что rotationChanged
не находится в matrixVisualization.h
- он в qwt_plot3D.h
, но я думал, что, поскольку я наследую от Plot3D
, все должно быть хорошо. Но теперь, когда я думаю об этом, поскольку SIGNAL и SLOT являются макросами, я предполагаю, что MOC не знает/заботится о наследовании.
Что приводит меня к моему вопросу - поскольку MOC и SIGNALS/SLOTS, похоже, не знают о наследовании и т.д.: как я могу подклассифицировать виджет, определенный где-то еще, и получить доступ к сигналам виджетов?
У меня есть много примеров того, как использовать инкапсуляцию для выполнения чего-то подобного, но я боюсь, что не понимаю, как это сделать с наследованием.
Извините, если это смешной вопрос - я чувствую, что мне не хватает чего-то очевидного.