Sono relativamente nuovo alla programmazione con Qt e ho avuto una domanda. Versione breve:Qt signals & inheritance question
Come si ereditano i segnali definiti nelle superclassi?
Sto cercando di creare una sottoclasse di qualcun altro QTWidgets ben fatti per cambiare alcuni dei comportamento di default:
//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))); } };
Il problema è nel QObject :: collega la linea. Quello che mi piacerebbe fare è collegare il SIGNAL rotationChanged (da qwt3D_plot.h) a una funzione locale/SLOT - "myRotationChanged". Tuttavia ogni volta che lo faccio, in fase di esecuzione ottengo:
Object::connect: No such signal matLinePlot::rotationChanged(double, double, double)
in C: ... \ matrixVisualization.h. Naturalmente, so che rotationChanged
non è in matrixVisualization.h
- è in qwt_plot3D.h
, ma ho pensato che dal momento che erediti da Plot3D
tutto dovrebbe andare bene. Ma, ora che ci penso, dal momento che SIGNAL e SLOT sono macro, suppongo che lo MOC non sappia/si preoccupi dell'ereditarietà.
Il che mi porta alla mia domanda - dal momento che MOC e SEGNALAZIONI/SLOT non sembrano sapere sull'eredità ecc. Come posso creare una sottoclasse di un widget definito da qualche altra parte e ottenere l'accesso ai segnali del widget?
Ho un sacco di esempi su come utilizzare l'incapsulamento per realizzare qualcosa di simile, ma temo di non capire come farlo con l'ereditarietà.
Scusate se questa è una domanda ridicola - mi sento come se mi mancasse qualcosa di ovvio.
il riferimento che si vede nell'errore a "matrixVisualization.h" mostra in quale file è fallito QObject :: connect, non dove sta cercando di "cercare" il segnale corrispondente. –