ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
4573
4573
EMPFEHLEN
-
16.10.05 14:34 #1
- Registriert seit
- Jul 2005
- Beiträge
- 8
Hallo Leute,
langsam stellt sich bei mir eine gewisse Frustration ein, weil ich jetzt schon seit mehreren Tagen an diesem Problem arbeite und irgendwie mich nur im Kreis dreh.
Also folgende Ausgangssituation:
- Mac OS X Tiger mit QT 4.0.1 Open Source mit dem Designer 4.0.1
- Alle Export Paths etc sind eingestellt und QT ist komplett richtig kompiliert und installiert worden nach /usr/local/Trolltech/QT 4.0.1/
Folgendes funktioniert ohne Probleme:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13
#include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton hello("Hello world!"); hello.resize(100, 30); hello.show(); return app.exec(); }
speichere dieses als main.cpp und mache dann
qmake -project
qmake
make
danach
open tutorial.app/
und schon läuft es, also würde ich sagen das die Bibliotheken und alles richtig installiert sind und qt eigentlich richtig kompiliert.
Nun wollte ich nicht eine ganze GUI mit Hand programmieren, sondern mit dem Designer. In der 3.0 Version gab es die Möglichkeit mit dem Designer ein ganzes Projekt zu erstellen, dass auch automatisch die main.cpp usw erzeugt hat. Das macht QT 4.0 die kostenlose Open Source Version scheinbar nicht mehr.
Ich starte den Designer und wähle Main Window aus. Dieses leere Fenster lasse ich so und speicher es ab unter File/Save Form as und nenne die Datei test.ui und speichere sie in dem Ordner ...../test ab.
Im Designer im Property Editor stehene folgende Informationen :
QObject : object Name : MainWindow
und im Object Inspector :
MainWindow (Obejct) : QMainWindow(class)
centralWidget(Object) : QWidget(class)
Nun gehe ich in die Shell und gehe in den Ordner test. Dort habe ich zur Zeit nur die eine test.ui die ja im XML Style gespeichert ist. Nun kann ich mit Hilfe von uic aus der UI Datei eine Header Datei machen:
uic -o test.h test.ui
Diese test.h sieht folgendermaßen aus:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
#ifndef TEST_H #define TEST_H #include <QtCore/QVariant> #include <QtGui/QAction> #include <QtGui/QApplication> #include <QtGui/QButtonGroup> #include <QtGui/QMainWindow> #include <QtGui/QWidget> class Ui_MainWindow { public: QWidget *centralWidget; void setupUi(QMainWindow *MainWindow) { MainWindow->setObjectName(QString::fromUtf8("MainWindow")); MainWindow->resize(QSize(800, 600).expandedTo(MainWindow->minimumSizeHint())); centralWidget = new QWidget(MainWindow); centralWidget->setObjectName(QString::fromUtf8("centralWidget")); MainWindow->setCentralWidget(centralWidget); retranslateUi(MainWindow); QMetaObject::connectSlotsByName(MainWindow); } // setupUi void retranslateUi(QMainWindow *MainWindow) { MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8)); Q_UNUSED(MainWindow); } // retranslateUi }; namespace Ui { class MainWindow: public Ui_MainWindow {}; } // namespace Ui #endif // TEST_H
nun brauche ich noch eine main.cpp Datei. Diese Datei habe ich aus dem Internet von Trolltech gefunden und die soll so aussehen:
Code :1 2 3 4 5 6 7 8 9 10
#include <QApplication> #include "test.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow widget; widget.show(); return app.exec(); }
Danach erstelle ich mit qmake -project das test.pro File
Code :1 2 3 4 5 6 7 8 9
TEMPLATE = app TARGET += DEPENDPATH += . INCLUDEPATH += . # Input HEADERS += test.h FORMS += test.ui SOURCES += main.cpp
danach mit qmake das Makefile erzeugen und mit make kompilieren
wenn ich dann das Programm starte kommt ein leeres Fenster aber nicht in der Größe, das ich angegeben hatte. Auch wenn ich Buttons oder so hinzufüge, bleibt das Fenster immer leer. Auch wenn ich im Deisgner die Größe veränder, passiert nichts.
Nun ist meine Idee, dass der Fehler in der main.cpp liegt, weil ich da
QMainWindow widget;
aufrufe. QMainWindow ist doch der Klassenname und widget das Objektname. Nun habe ich anstall QMainWindow auch mal QWidget ausprobiert, ging aber auch nicht.
Ich habe auch schon sämtliche Dokumente von Trolltech gelesen, aber es läuft irgendwie nicht.
Hat jemand von euch vielleicht eine Idee ?
Viele Grüße von
Hauke
PS: Danke schonmal !
-
16.10.05 20:25 #2
- Registriert seit
- Jan 2002
- Ort
- Bayern
- Beiträge
- 1.390
Hi also eine Idee direkt hab ich nicht aber was mir auffällt ist folgendes:
in deiner generierten Header datei hast du eine Klasse
Das scheint wohl dein Hauptfenster zu sein, aber in deiner main.cpp definierts du:Code :1
class MainWindow: public Ui_MainWindow {};
sollte das dann nicht so heissen?Code :1
QMainWindow widget;
Ansonsten würdest du ja eine Basis.Fensterklasse von QT instanzieren.Code :1
MainWindow widget;
Prüf das mal.
Sonst fällt mir noch auf, dass in deinem Header die Größe festgelegt wird:
Ändert sich das, wenn du im Designer andere Werte verwendest?Code :1
MainWindow->resize(QSize(800, 600).expandedTo(MainWindow->minimumSizeHint()));
Das sind nur Vermutungen von mir, aber vielleich hilfts ja.
Danielwe would change the world if god gave us the source code...
and remember, science is nothing more than reverse engineering nature...
Current projects:
- LdrawConverter
-
18.10.05 09:19 #3
- Registriert seit
- Jul 2005
- Beiträge
- 8
Hi,
danke für deine Antwort und hier leider die traurigen Ergebnisse deiner Ideen :
Wenn ich aus QMainWindow -> MainWindow mache kommt bei "make" folgender Fehler:
Code :1 2 3 4 5 6
c++ -c -pipe -g -Wall -W -F/usr/local/Trolltech/Qt-4.0.1/lib -DQT_CORE_LIB -DQT_GUI_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.0.1/mkspecs/macx-g++ -I. -I/usr/local/Trolltech/Qt-4.0.1/lib/QtGui.framework/Versions/4.0/Headers -I/usr/local/Trolltech/Qt-4.0.1/lib/QtCore.framework/Versions/4.0/Headers -I/usr/local/Trolltech/Qt-4.0.1/include -I. -I. -I. -o main.o main.cpp main.cpp: In function `int main(int, char**)': main.cpp:7: error: 'MainWindow' was not declared in this scope main.cpp:7: error: expected `;' before "widget" main.cpp:8: error: 'widget' was not declared in this scope make: *** [main.o] Error 1
Wenn ich in der Header Datei die Windows Size von 800 x 600 auf 20 x 20 ändere und es auf QMainWindow lasse, lässt er die Größe wie vorher, also instanziert der ein neues Default Window Widget. Nur die Frage ist warum ? Wenn ich nun im Designer eine neue ui datei erstellen lasse, in der die Fenstergröße vom Standart abweicht, steht auch diese Größe nach uic -o ...... in der Header Datei. Also die Konvertierung mit uic -> Header File funktioniert gut.
Hat jemand noch eine Idee? Ist bestimmt doch nur eine Kleinigkeit, so wie ich mir das vorstelle.
Vielen Dank schonmal.
Mfg Hauke
-
18.10.05 18:21 #4
- Registriert seit
- Jan 2002
- Ort
- Bayern
- Beiträge
- 1.390
Hi,
ui sorry da hab ich was vergessen, du definierst das ja innerhalb eines namespaces, also müsste deine main so aussehen:
Code :1 2 3 4 5 6 7 8 9 10
#include <QApplication> #include "test.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); Ui::MainWindow widget; widget.show(); return app.exec(); }
Gruß Danielwe would change the world if god gave us the source code...
and remember, science is nothing more than reverse engineering nature...
Current projects:
- LdrawConverter
-
19.10.05 11:45 #5
- Registriert seit
- Jul 2005
- Beiträge
- 8
Hi,
so langsam komme ich der Sache näher. Nun kommt folgende Fehlermeldung, wenn ich deine main.cpp benutze. Ich habe auch vorsichtshalber noch sämtliche Header Files in der main.cpp included, die im header included werden.
Code :1 2 3 4
c++ -c -pipe -g -Wall -W -F/usr/local/Trolltech/Qt-4.0.1/lib -DQT_CORE_LIB -DQT_GUI_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.0.1/mkspecs/macx-g++ -I. -I/usr/local/Trolltech/Qt-4.0.1/lib/QtGui.framework/Versions/4.0/Headers -I/usr/local/Trolltech/Qt-4.0.1/lib/QtCore.framework/Versions/4.0/Headers -I/usr/local/Trolltech/Qt-4.0.1/include -I. -I. -I. -o main.o main.cpp main.cpp: In function `int main(int, char**)': main.cpp:13: error: 'class Ui::MainWindow' has no member named 'show' make: *** [main.o] Error 1
-
Aloa
das Problem ist schlicht und ergreifend, dass du bei der mit dem Qt-Designer erstellten Klasse keine show hast... bzw. sie sich selber kein eigenes Fenster erstellt. Anstatt dessen musst du eines selber erstellen und dieses dann an deine Klasse mit der Funktion setupUI übergeben.
Code :1 2 3 4 5
QMainWindow widget; Ui_MainWindow test; test.setupUi(&widget); widget.show(); return app.exec();
Hatte das Problem bis gerade eben auch
(darf das ganze gerade für ein Studienbezogenes Semesterprojekt machen
)
Ähnliche Themen
-
Probleme beim Speichern einer BMP Datei
Von nasir im Forum JavaAntworten: 1Letzter Beitrag: 23.03.10, 16:49 -
Probleme beim kompilieren
Von soulerino im Forum JavaAntworten: 19Letzter Beitrag: 23.08.07, 14:19 -
Probleme beim öffnen einer Datei
Von Anatonomy im Forum 3D Studio MaxAntworten: 1Letzter Beitrag: 17.11.04, 22:57 -
Probleme beim Kompilieren von PHP 5
Von nicci im Forum PHPAntworten: 0Letzter Beitrag: 05.08.04, 12:30 -
[V-c++]Probleme beim Kompilieren
Von g-zus im Forum C/C++Antworten: 6Letzter Beitrag: 11.11.02, 14:48





Zitieren
Login





