Soy relativamente nuevo en la programación con Qt y tenía una pregunta. Versión corta:Qt señales & herencia pregunta
¿Cómo heredo las señales definidas en las superclases?
Estoy intentando subclase de otra persona muy bien hechas QTWidgets para cambiar algunos de los comportamientos por defecto:
//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))); } };
El problema está en el QObject :: conecta la línea. Lo que me gustaría hacer es conectar el rotationChanged SIGNAL (de qwt3D_plot.h) a una función local/SLOT - "myRotationChanged". Sin embargo cada vez que hago esto, en tiempo de ejecución consigo:
Object::connect: No such signal matLinePlot::rotationChanged(double, double, double)
en C: ... \ matrixVisualization.h. Por supuesto, sé que rotationChanged
no está en matrixVisualization.h
- está en qwt_plot3D.h
, pero pensé que como heredo de Plot3D
todo debería estar bien. Pero, ahora que lo pienso, dado que SIGNAL y SLOT son macros, supongo que MOC no sabe ni se preocupa por la herencia.
Lo que me lleva a mi pregunta, ya que MOC y SIGNALS/SLOTS no parecen saber acerca de la herencia, etc. ¿Cómo puedo crear una subclase de un widget definido en otro lugar y obtener acceso a las señales del widget?
Tengo muchos ejemplos de cómo usar la encapsulación para lograr algo como esto, pero me temo que no entiendo cómo hacerlo con la herencia.
Disculpe si esta es una pregunta ridícula - Siento que me falta algo obvio.
La referencia que ve en el error de "matrizVisualización.h" muestra en qué archivo se encuentra el QObject :: connect fallido, no en dónde está tratando de "buscar" la señal correspondiente. –