Frage

Mit Qt Creator, ich bin eine Klasse mit benutzerdefinierten Slots in Qt zu erstellen:


class CustomEdit : public QTextEdit
{
    Q_OBJECT

public:
    CustomEdit(QWidget* parent);

public slots:
    void onTextChanged ();
};

Allerdings erhalte ich diese Linkerfehler:

undefined reference to 'vtable for CustomEdit'

Die Dokumentation sagt:

  

Wenn Sie Compiler-Fehler entlang der Linien von „undefined reference to VTable für LcdNumber“ erhalten, haben Sie wahrscheinlich vergessen, die moc zu laufen oder die moc Ausgabe im Link-Befehl enthalten.

... aber es ist nicht klar, was das bedeutet.

Gibt es etwas, was ich brauche, um meine Klasse hinzuzufügen, oder in die .pro-Datei?

Bearbeiten - Hier ist meine .proDatei:

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

EDIT:

Diese Frage befasst sich mit der gleiche Probleme, aber die Antworten machen es nicht klar, wie ich dieses Problem in Qt Creator beheben kann. Muss ich ausdrücklich die moc generierte CPP-Datei auf meiner Liste der Dateien in den verknüpft werden? Das scheint wie ein Schmerz.

War es hilfreich?

Lösung

Qt Creator ist eine IDE, die verwendet wird Ihre Qt-Projekte zu erstellen. Das ist alles. Aber Qmake können Sie das Projekt buid. Aus Qmake Handbuch ,

Qmake Automatisiert die Generierung von Makefiles, so dass nur ein paar Zeilen von Informationen nötig sind, um jedes Makefile zu erstellen. qmake generiert ein Makefile auf der Grundlage der Informationen in einer Projektdatei. qmake enthält weitere Funktionen unterstützen die Entwicklung mit Qt, automatisch einschließlich Build-Regeln für moc und uic.

Sie don haben Ihre moc Dateien separat zählen, aber Sie haben Qmake zu laufen, die alle Informationen über die erforderlichen moc-Dateien enthält. Werfen Sie einen Blick auf die erzeugte Makefile.debug oder Makefile.release nach qmake und Sie können alle moc-Dateien für Sie aufgenommen werden.

Jetzt qmake in Qt Creator zu laufen, gehen Sie einfach auf Build->RebuildAll die die Qmake laufen und alle (moc) Dateien generiert und verknüpft (in Makefile.debug) als auch.

Hoffentlich wird dies Ihre undefined reference elimate.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top