Я относительно новичок в программировании на Qt и у меня возник вопрос. Короткая версия:
Как мне наследовать сигналы, определенные в суперклассах?
Я пытаюсь создать подкласс QTWidget другого пользователя, чтобы изменить поведение по умолчанию:
//Plot3D is a QWidget that defines a signal "rotationChanged"
class matLinePlot : public QObject, public Plot3D {
Q_OBJECT;
//etc...
public:
//etc...
//Catch Plot3D's 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. То, что я хотел бы сделать, это подключить вращение SIGNAL (из qwt3D_plot.h) к локальной функции / слот - «myRotationChanged». Однако всякий раз, когда я делаю это, во время выполнения я получаю:
Object :: connect: такого сигнала нет matLinePlot :: вращениеChanged (double, double, double)
в C: ... \ matrixVisualization.h. Конечно, я знаю, что rotationChanged
не в matrixVisualization.h
- это в qwt_plot3D.h
, но я подумал, что, поскольку я наследую от Plot3D
, все должно быть хорошо. Но теперь, когда я думаю об этом, поскольку SIGNAL и SLOT являются макросами, я предполагаю, что MOC не знает / не заботится о наследовании.
Что приводит меня к моему вопросу - поскольку MOC и SIGNALS / SLOTS, кажется, не знают о наследовании и т. Д .: как я могу создать подкласс виджета, определенного в другом месте, и получить доступ к сигналам виджета?
У меня есть много примеров того, как использовать инкапсуляцию для достижения чего-то подобного, но, боюсь, я не понимаю, как сделать это с наследованием.
Извините, если это нелепый вопрос - я чувствую, что упускаю что-то очевидное.