Я относительно новичок в программировании с 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, похоже, не знают о наследовании и т.д.: как я могу подклассифицировать виджет, определенный где-то еще, и получить доступ к сигналам виджетов?
У меня есть много примеров того, как использовать инкапсуляцию для выполнения чего-то подобного, но я боюсь, что не понимаю, как это сделать с наследованием.
Извините, если это смешной вопрос - я чувствую, что мне не хватает чего-то очевидного.