Seite 1 von 1

Q_OBJECT - Probleme eines Einsteigers

Verfasst: 22. April 2006 17:05
von Omega Psi
Ich komme eigentlich aus der Java-Programmierung und will nun in C++ und QT einsteigen. Doch schon die ersten Gehversuche erscheinen wie "barfuss auf Glasscherben".

Ich habe versucht, die OpenGL-Tutorials der des Indipendent QT-Tutorials durchzuackern. Solange ich nicht auf das Q_OBJECT Makro angwiesen bin, funktioniert auch alles super. Ich verwende Microsoft Visual Studio .NET 2003 und QT 3.3.3 Educational.

Hier mein Quellcode (die Implementierungen der Funktion paintGL() etc habe ich aus Platzgründen weggelassen. Wie bereits erwähnt, compiliert alles, was nicht auf das Q_OBJECT-Makro angwiesen ist. In den entsprechenden Beispielen habe ich die entsprechenden Stellen auskommentiert):
Datei: myopenglwidget.h

Code: Alles auswählen


#include <qgl.h>
#include <qtimer.h>

#pragma once

class MyOpenGLWidget : public QGLWidget {
	Q_OBJECT
public:
	MyOpenGLWidget(int timerInterval=0, QWidget *parent=0, char *name=0);
	~MyOpenGLWidget(void);
protected:
	virtual void initializeGL()=0;
	virtual void paintGL()=0;	
	virtual void resizeGL(int height, int width)=0;	
	virtual void timeOut();
protected slots:
	virtual void timeOutSlots();
private:
	QTimer *timer;
};
Datei: myopenglwidget.cpp

Code: Alles auswählen

#include ".\myopenglwidget.h"
#using <mscorlib.dll>

MyOpenGLWidget::~MyOpenGLWidget(void) {
}
Datei: main.h

Code: Alles auswählen

#pragma once

#include <qapplication.h>

class Main {
public:
	Main(void);
	~Main(void);
};
Datei: main.cpp

Code: Alles auswählen

#include ".\main.h"
#include ".\myopenglwidget.h"
#using <mscorlib.dll>

Main::Main(void) {
}

Main::~Main(void) {
}

int main (int argc, char **argv) {

	QApplication application(argc, argv);
	MyOpenGLWidget *glwidget = new MyOpenGLWidget();
	application.setMainWidget(glwidget);
	glwidget->show();
	return application.exec();
}
Datei: QT_OPENGL.pro

Code: Alles auswählen

HEADERS += Main.h MyOpenGLWidget.h
SOURCES += Main.cpp MyOpenGLWidget.cpp
Desweiteren gebe ich folgende Zeilen in die Console ein:

Code: Alles auswählen

..> qmake -project -o QT_OPENGL.pro "QT=core gui" "TARGET=QT_OPENGL" 
..> qmake -tp vc -o QT_OPENGL 
..> qmake 
..> nmake
Es wird anscheinden erfolgreich die Datei moc_MyOpenGLWidget.cpp zusammen mit dem Makefile erstellt. Das Mal lief alles reibungslos, mittlerweile bekomme ich aber die Fehlermeldung:
NMAKE: fatal error U1077 'cl': Rueckgabe-Code '0x1'
Stop


Bin mit meinem Latein und Ressourcen nun am Ende angelangt, hat jemand vielleicht eine Hilfestellung oder eine Lösung für mich?

Verfasst: 22. April 2006 17:22
von Christian81
NMAKE: fatal error U1077 'cl': Rueckgabe-Code '0x1'
Stop
Da müssen davor noch andere Fehlermeldungen gekommen sein.

Verfasst: 22. April 2006 17:32
von Omega Psi
Hier mal abgetippt, was die Konsole ausgibt:

Code: Alles auswählen

Microsoft (R) Progr...
Copyright (C) Micro...

    cl -c -nologo -Zm200 -W3 -w34100 -w34189 -MD -01 -GX -DUNICODE _DWIN32 -DQT_DLL -DQT_THREADSUPPOR -DQT_NO_DEBUG -I"." -I"C:\Qt\3.3.3Educational\include" -I"C:QT_WORKSPACE\QT_OPENGL" -I"C:\Qt\3.3.3Educational\mkspecs\win32-msvc.net" -Fo @C:\DOKUME~1\Admin\LOKALE~1\Temp\nm4C.tmp
Der Befehl "cl" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
NMAKE : fatal error U1077: 'cl': Rückgabe '0x1'
Stop.
Nachtrag: Die Beispiele, bei denen ich nicht auf Q_OBJECT angewiesen war, habe ich direkt über die Visual studio IDE kompiliert.

Verfasst: 22. April 2006 18:04
von Christian81
Omega Psi hat geschrieben: Der Befehl "cl" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
cl.exe ist nicht im PATH
Hast du auch 'Visual Studio 2003 command Prompt' anstatt cmd.exe benutzt? (Siehe Startmenu)
cl.exe ist der eigentliche Compiler und der sollte schon vorhanden sein.

Verfasst: 23. April 2006 13:06
von Omega Psi
Danke für den Hinweis!

Werde das gleich mal ausprobieren!

Verfasst: 24. April 2006 09:49
von Omega Psi
Ich hatte in der Tat nur die cmd.exe Shell benutzt. Leider treten nun immer noch Kompilierfehler auf:

Code: Alles auswählen

Fatal error C1190: Verwalteter abziehlender Code erfordert '#using <mscorelib.dll>' und den '/CLR'-Schalter
Code wird generiert...
NMAKE:fatal error U1077: 'cl':Rueckgab-Code '0x2'
Stop.
Die mscorelib.dll ist doch aber eingebunden...

Falls mir da noch jemand helfen kann, ich bin echt super dankbar!