Domanda

Utilizzando Qt Creator, sto creando una classe con slot personalizzati in Qt:


class CustomEdit : public QTextEdit
{
    Q_OBJECT

public:
    CustomEdit(QWidget* parent);

public slots:
    void onTextChanged ();
};

Comunque, sto ottenendo questo errore linker:

undefined reference to 'vtable for CustomEdit'

La documentazione dice:

  

se si ottiene errori di compilazione lungo le linee di "undefined reference to vtable per LcdNumber", probabilmente avete dimenticato di eseguire il moc o per includere l'output MOC nel comando di collegamento.

... ma non è ovvio che cosa ciò significhi.

C'è qualcosa che ho bisogno di aggiungere alla mia classe, o per il file .pro?

Modifica - Ecco il mio file .pro:

QT += network \
    script \
    webkit \
    xml
TARGET = MyApp
TEMPLATE = app
SOURCES += main.cpp \
    MainWindow.cpp \
    CustomEdit.cpp 
HEADERS += MainWindow.h \
    CustomEdit.h
FORMS += mainwindow.ui

Modifica

questa domanda si occupa della stessi problemi, ma le risposte non rendono chiaro come posso risolvere questo problema in Qt Creator. Devo aggiungere esplicitamente il file cpp moc generati alla mia lista di file da collegare? Che sembra come un dolore.

È stato utile?

Soluzione

Qt Creator è un IDE che viene utilizzato per creare i vostri progetti Qt. È tutto. Ma qmake permette di buid il progetto. Da qmake ,

qmake automatizza la generazione di Makefile in modo che solo poche righe di informazioni sono necessari per creare ogni Makefile. qmake genera un Makefile sulla base delle informazioni in un file di progetto. qmake contiene funzionalità aggiuntive per sostenere lo sviluppo di Qt, tra cui automaticamente le regole di generazione per moc e UIC.

Si don necessario includere i file MOC a parte, ma è necessario eseguire qmake che contiene tutte le informazioni relative ai file MOC richiesti. Date un'occhiata al Makefile.debug generate o Makefile.release dopo qmake e si possono trovare tutti i file moc saranno inclusi per voi.

Ora per eseguire qmake in Qt Creator, basta andare a Build->RebuildAll che si svolgerà il qmake e tutti i file (MOC) saranno generati e collegati (in Makefile.debug) pure.

Speriamo che questo elimate vostro riferimento non definito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top