Seite 1 von 2
projekt erstellen bzw wo ist die main
Verfasst: 24. Januar 2006 18:04
von neo
hallo,
ich habe mit dem designer ein fenster erstellt. habe es gespeichert unter test.ui.
was mach ich jetzt damit? wenn ich es compilieren will mit qmake -project, qmake und make erhalte ich den fehler das die main fehlt, was auch klar ist. Aber wie gehe ich weiter vor? wie erzeuge ich den die main? bzw was muss ich machen? ich würde mich freuen über ein paar hilfestellungen.
mfg
Verfasst: 25. Januar 2006 09:17
von methusalem
Verfasst: 26. Januar 2006 08:19
von neo
hi,
danke erstmal!
also hab mir das video angeschaut und genauso eine von mir erstellte testklasse compiliert, nur leider erhalte ich folgenden fehler denn ich nicht nachvolziehen kann:
main.cpp: In function `int qMain(int, char**)':
main.cpp:10: error: `MainWindow' is not a member of `Ui'
main.cpp:10: error: expected `;' before "ui"
main.cpp:11: error: `ui' undeclared (first use this function)
main.cpp:11: error: (Each undeclared identifier is reported only once for each f
unction it appears in.)
mingw32-make[1]: *** [release\main.o] Error 1
bei der main.cpp
#include "ui_test1.h"
#include <QtGui/QtGui>
int main(int argc,char *argv[]){
QApplication app(argc,argv);
app.setQuitOnLastWindowClosed(true);
QMainWindow *form = new QMainWindow;
Ui::MainWindow ui;
ui.setupUI(form);
form->show();
return app.exec();
}
gruß
Verfasst: 26. Januar 2006 08:39
von methusalem
neo hat geschrieben:...
Code: Alles auswählen
main.cpp: In function `int qMain(int, char**)':
main.cpp:10: error: `MainWindow' is not a member of `Ui'
main.cpp:10: error: expected `;' before "ui"
main.cpp:11: error: `ui' undeclared (first use this function)
main.cpp:11: error: (Each undeclared identifier is reported only once for each f
unction it appears in.)
mingw32-make[1]: *** [release\main.o] Error 1
Hier sagt dir der Compiler, das er MainWindow nicht kennt! Deine Klasse, die du mit Hilfe des Designers und make erstellt hast, hat ziemlich sicher einen anderen Namen!
Code: Alles auswählen
bei der main.cpp
#include "ui_test1.h"
#include <QtGui/QtGui>
int main(int argc,char *argv[]){
QApplication app(argc,argv);
app.setQuitOnLastWindowClosed(true);
QMainWindow *form = new QMainWindow;
Ui::MainWindow ui;
ui.setupUI(form);
form->show();
return app.exec();
}
Die Zeile
Ui::MainWindow ui; muss so lauten:
wobei XYZ der Klassenname deiner GUI Klasse ist.
Ich denke du solltest dich noch einmal ausführlich mit der QT Doku beschäftigen. Hier mal ein Link, der sich mit dem Thema beschäftigt:
http://doc.trolltech.com/4.1/designer-u ... onent.html
Das Thema hatten wir gestern erst noch im Forum:
http://www.qtforum.de/forum/viewtopic.php?t=1349
Verfasst: 26. Januar 2006 15:13
von neo
hallo,
ich verstehe es nicht so ganz. meine main habe ich jetzt darauf geändert, weil in der ui_test1.h steht die klasse ui_dialog:
Code: Alles auswählen
#include "ui_test1.h"
#include <QtGui/QtGui>
int main(int argc,char *argv[]){
QApplication app(argc,argv);
app.setQuitOnLastWindowClosed(true);
QMainWindow *form = new QMainWindow;
[b]Ui::Ui_Dialog ui;[/b]
ui.setupUI(form);
form->show();
return app.exec();
}
aber ich erhalte trotzdem noch einen fehler:
Code: Alles auswählen
main.cpp: In function `int qMain(int, char**)':
main.cpp:10: error: `Ui_Dialog' is not a member of `Ui'
main.cpp:10: error: expected `;' before "ui"
main.cpp:11: error: `ui' undeclared (first use this function)
main.cpp:11: error: (Each undeclared identifier is reported only once for each f
unction it appears in.)
mingw32-make[1]: *** [release\main.o] Error 1
ich glaub ich bin ein wenig schwer von begriff!!
danke schau ich mir direkt mal an
gruß
Verfasst: 26. Januar 2006 15:16
von neo
nochmal ich
der inhalt der ui_test.h
Code: Alles auswählen
#ifndef UI_TEST1_H
#define UI_TEST1_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QHBoxLayout>
#include <QtGui/QPushButton>
#include <QtGui/QSpacerItem>
#include <QtGui/QWidget>
class Ui_Dialog
{
public:
QWidget *layoutWidget;
QHBoxLayout *hboxLayout;
QSpacerItem *spacerItem;
QPushButton *okButton;
QPushButton *cancelButton;
void setupUi(QDialog *Dialog)
{
Dialog->setObjectName(QString::fromUtf8("Dialog"));
Dialog->resize(QSize(400, 300).expandedTo(Dialog->minimumSizeHint()));
layoutWidget = new QWidget(Dialog);
layoutWidget->setObjectName(QString::fromUtf8("layoutWidget"));
layoutWidget->setGeometry(QRect(20, 250, 351, 33));
hboxLayout = new QHBoxLayout(layoutWidget);
hboxLayout->setSpacing(6);
hboxLayout->setMargin(0);
hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
spacerItem = new QSpacerItem(131, 31, QSizePolicy::Expanding, QSizePolicy::Minimum);
hboxLayout->addItem(spacerItem);
okButton = new QPushButton(layoutWidget);
okButton->setObjectName(QString::fromUtf8("okButton"));
hboxLayout->addWidget(okButton);
cancelButton = new QPushButton(layoutWidget);
cancelButton->setObjectName(QString::fromUtf8("cancelButton"));
hboxLayout->addWidget(cancelButton);
retranslateUi(Dialog);
QObject::connect(okButton, SIGNAL(clicked()), Dialog, SLOT(accept()));
QObject::connect(cancelButton, SIGNAL(clicked()), Dialog, SLOT(reject()));
QMetaObject::connectSlotsByName(Dialog);
} // setupUi
void retranslateUi(QDialog *Dialog)
{
Dialog->setWindowTitle(QApplication::translate("Dialog", "Dialog", 0, QApplication::UnicodeUTF8));
okButton->setText(QApplication::translate("Dialog", "OK", 0, QApplication::UnicodeUTF8));
cancelButton->setText(QApplication::translate("Dialog", "Cancel", 0, QApplication::UnicodeUTF8));
Q_UNUSED(Dialog);
} // retranslateUi
};
namespace Ui {
class Dialog: public Ui_Dialog {};
} // namespace Ui
#endif // UI_TEST1_H
Verfasst: 26. Januar 2006 15:16
von methusalem
Moin,
poste mal die letzten 10 Zeilen deiner ui_test1.h
EDIT: Hat sich erledigt!
Die Zeile muss so aussehen:
Ui::Dialog ui;
Verfasst: 26. Januar 2006 15:20
von methusalem
Code: Alles auswählen
namespace Ui {
class Dialog: public Ui_Dialog {};
} // namespace Ui
Dies Zeilen sagen dir, das im Namespace Ui die Klasse Dialog von Ui_Dialog abgeleitet wurde. Und von genau dieser Klasse erstellst du dann ein Object in deiner Source.
Verfasst: 26. Januar 2006 15:32
von neo
hi,
also hab es geändert: folgender fehler:
Code: Alles auswählen
main.cpp: In function `int qMain(int, char**)':
main.cpp:11: error: 'class Ui::meinwindow' has no member named 'setupUI'
mingw32-make[1]: *** [release\main.o] Error 1
mingw32-make[1]: Leaving directory `C:/Dokumente und Einstellungen/tifo/Desktop/
habe die klasse umbenannt in meinwindow!! deshalb der andere name!
gruß
Verfasst: 26. Januar 2006 15:45
von methusalem
Moin,
1.) Bevor man etwas umbennt, erstmal alles so lassen wie es ist und damit zum Ziel kommen. Danach kann man das immernoch ändern.
2.) Wenn du auf nummer sicher gehen willst, dann geh in den Designer und ändere dort den Namen des Objektes. Daraus wird nämlich der Klassenname erstellt. Dann kannst du sicher sein, das auch alle Stellen mit angepasst wurden. Dein Objekt hieß vorher Dialog und soll nun meinwindow heißen. Das änderst du im Designer.
Speicher dies ab. Mach danach ein make clean und dann ein make. Danach sollte es geklappt haben ...
Verfasst: 26. Januar 2006 15:48
von MichaelS
Hi,
Du hast die Groß- und Kleinschreibung nicht beachtet. Die Funktion heißt setupUi (siehe test.ui.h) und nicht setupUI.
Darum mosert der Compiler.
Gruß Michael
Verfasst: 26. Januar 2006 16:00
von methusalem
Da hast du recht .... hab ich überlesen!
Verfasst: 26. Januar 2006 16:19
von neo
hallo ihr beiden,
vielen vielen dank!! der fehlerteufel
gruß und schönen tag!!
Verfasst: 26. Januar 2006 16:41
von neo
hi,
hab nochmal ne frage,
ich kenn das slot system so, aus qt3, das man selber slots deklarieren kann und zu den slots dann funktionen schreiben kann. wie geht das hier? ich hab einen slot angelegt, aber kann nur funktionen von qt nehmen.
gruß
Verfasst: 27. Januar 2006 11:00
von macman
neo hat geschrieben:ich kenn das slot system so, aus qt3, das man selber slots deklarieren kann und zu den slots dann funktionen schreiben kann. wie geht das hier?
Ein Slot ist eine Funktion, die durch ein Signal oder direkt aufgerufen wird. Das funktioniert im Grunde genauso wie vorher. Einziger, aber großer Unterschied ist, das man sie jetzt selbst als Slot deklarieren muss und nicht mehr einfach Funktionen überschreibt, die schon in der Implementierungsdatei als Slot definiert sind.