2009-09-07 3 views
21

Ho la mia classe X che eredita dalla classe Qt Base. Ho dichiarato e definito lo slot void mySlot() nella mia classe X e sto collegando alcuni segnali a questo slot nel costruttore di X. Tuttavia, durante l'esecuzione del programma, viene visualizzato un messaggio di errore che indica che non esiste uno slot di tipo void mySlot() nella classe Base.Perché Qt cerca il mio slot nella classe base invece di quello derivato?

Perché il codice generato dal Meta Object Compiler (moc) cerca il mio slot nella classe base e non nella mia classe (derivata)?

risposta

45

Hai aggiunto la macro Q_OBJECT alla classe derivata?

6

Da #qt canale IRC

  1. Assicurarsi che la macro Q_OBJECT è presente nella definizione di tutte le classi QObject-derivate.
  2. Assicurarsi di dichiarare SOLO le classi derivate da QObject nei file di intestazione SOLO.
  3. Assicurarsi che tutti i file di intestazione siano elencati nel file .pro nell'elenco HEADERS =.
  4. Esegui qmake ogni volta che aggiungi Q_OBJECT a una delle tue classi o modifica il tuo file .pro.