Hallo,
Ich nutze die OpenSource Qt 4.1.1 Variante mit MSVC .NET 7.1. Es klappt auch wunderbar Projekte zu kompilieren und auszuführen.
Leider habe ich ein größeres, fremdes und fertiges Qt Projekt, welches ich erweitern möchte.
Nur leider erscheint der Fehler: "This file was generated using the moc from 4.0.0. It" beim kompilieren. Ich habe die vorhanden moc Dateien, sie liegen in der Form moc_*.cpp vor, als Source files mit in das Projekt eingefügt.
Kann mir jemand als Qt Neuling bitte einmal auf gut deutsch erklären was es mit dem Meta Object Compiler auf sich hat. Und gibt es eine Möglichkeit an die OpenSource Qt 4.0.0 Variante zukommen, oder wenigstens an den Moc Version58 zu kommen? Ich habe bis jetzt schon ziemlich viel gesucht aber keine wirklich befriedigen Ergebnisse bekommen. Weder auf der trolltech seite noch hier im Forum.
Danke für die Hilfe im voraus....
MOC Fehler
Hilfestellung
Also der MOC (Meta Object Compiler) von QT ist für die SIGNALs und SLOTs von QT. Um die verschiedenen Funktionen beim entsprechenden Aufruf von connect und emit miteinander zu verbinden müssen Klassen die von QObject ableiten und eigene SLOTs oder SIGNALs definieren mit dem Moc übersetzt werden. Des weiteren ist bei diesen Klassen das Schlüsselwort Q_OBJECT einzutragen.
z.B.:
Am einfachsten integrierst du den Vorgang in Visual Studio, indem du einen Custom Build Step (bzw. Benutzerdefinierten Build Schritt oder so) den entsprechenden Header-Dateien hinzufügst (Rechte Maustaste auf Header Datei -> Properties bzw. Eigenschaften)
Dort hast Du dann die drei Eingabefelder (im folgenden nur noch Englisch, da ich keine deutsche Version installiert hab und nicht genau weiss wie's dort heisst):
Command Line:
Description:
Outputs:
Ich installiere QT immer so, dass ich zusätzlich eine Umgebungsvariable QTDIR unter Windows anlege, die auf das Installationsverzeichnis verweist: Also z.B. QTDIR = C:\Programme\Qt4.1.1
Solltest Du das bei Dir auch so einrichten, ist der Rest mit Hilfe der eingebauten Visual Studio Variablen sehr einfach:
Bei Command Line gibst Du einfach folgendes an:
die Anführungszeichen hier sind wichtig, da bei Pfaden mit Leerzeichen sonst Probleme auftreten. Evtl. muß das $(QTDIR)\bin\moc.exe auch noch in Anführungzeichen gesetzt werden wenn ein Lehrzeichen im Installationspfad von QT vorkommt. Kann ich nicht beurteilen, da das bei mir nicht der Fall ist.
Bei Description:
und bei Outputs:
Das ganze so übernehmen und den Eigenschaftendialog schließen.
Nun kannst du mit einem Rechtsklick auf die Header Datei diese kompilieren (Compile). Danach wird hoffentlich ohne Fehler der Mo'Compiler angeworfen und es entsteht die moc_<dateiname>.cpp Datei. Diese kannst Du dann dem Projekt hinzufügen und alles funkioniert wunderbar.
Wenn der Compiler sich beschwert, das die Moc Dateien mit einer anderen Version erstellt wurden hilft ab sofort ein Rebuild des Projekts bzw. ein manueller Rechts-Klick und Compile auf den entsprechenden Header Dateien.
Der Trick mit der Umgebungsvariable QTDIR ist auch sehr praktisch wenn's darum geht auf mehreren Rechnern das selbe Projekt zu übersetzen. Wenn alle die selbe Umgebungsvariable definieren ist es egal wo QT installiert ist.
Ich hoffe ich konnte Dir weiterhelfen. Bei VS2005 gehts ein ganz klein wenig anders und das 2003er hab ich nicht mehr installiert.
z.B.:
Code: Alles auswählen
#ifndef SAMPLE_H_
#define SAMPLE_H_
class Sample : public QObject
{
Q_OBJECT
public:
Sample(QObject* parent) : QObject(parent) {}
public slots:
void beispielSlot(const QString& message);
signals:
void outputSignal(const QString&);
};
Dort hast Du dann die drei Eingabefelder (im folgenden nur noch Englisch, da ich keine deutsche Version installiert hab und nicht genau weiss wie's dort heisst):
Command Line:
Description:
Outputs:
Ich installiere QT immer so, dass ich zusätzlich eine Umgebungsvariable QTDIR unter Windows anlege, die auf das Installationsverzeichnis verweist: Also z.B. QTDIR = C:\Programme\Qt4.1.1
Solltest Du das bei Dir auch so einrichten, ist der Rest mit Hilfe der eingebauten Visual Studio Variablen sehr einfach:
Bei Command Line gibst Du einfach folgendes an:
Code: Alles auswählen
$(QTDIR)\bin\moc.exe "$(InputPath)" -o "$(InputDir)moc_$(InputName).cpp"Bei Description:
Code: Alles auswählen
Performing moc on $(InputName).hCode: Alles auswählen
$(InputDir)moc_$(InputName).cppNun kannst du mit einem Rechtsklick auf die Header Datei diese kompilieren (Compile). Danach wird hoffentlich ohne Fehler der Mo'Compiler angeworfen und es entsteht die moc_<dateiname>.cpp Datei. Diese kannst Du dann dem Projekt hinzufügen und alles funkioniert wunderbar.
Wenn der Compiler sich beschwert, das die Moc Dateien mit einer anderen Version erstellt wurden hilft ab sofort ein Rebuild des Projekts bzw. ein manueller Rechts-Klick und Compile auf den entsprechenden Header Dateien.
Der Trick mit der Umgebungsvariable QTDIR ist auch sehr praktisch wenn's darum geht auf mehreren Rechnern das selbe Projekt zu übersetzen. Wenn alle die selbe Umgebungsvariable definieren ist es egal wo QT installiert ist.
Ich hoffe ich konnte Dir weiterhelfen. Bei VS2005 gehts ein ganz klein wenig anders und das 2003er hab ich nicht mehr installiert.