Kubuntu und Qt
-
Calculatorform.ui ist der name der designer-datei
und das ist der ganze code - den rest hat der computer automatisch gemacht
also die pro-datei:
######################################################################
# Automatically generated by qmake (2.01a) Sa Aug 16 10:19:47 2008
######################################################################TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .# Input
FORMS += Calculatorform.ui
SOURCES += main.cppund die Bibliothek:
/********************************************************************************
** Form generated from reading ui file 'Calculatorform.ui'
**
** Created: Sat Aug 16 10:19:52 2008
** by: Qt User Interface Compiler version 4.3.4
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/#ifndef UI_CALCULATORFORM_H
#define UI_CALCULATORFORM_H#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QGridLayout>
#include <QtGui/QHBoxLayout>
#include <QtGui/QLabel>
#include <QtGui/QLineEdit>
#include <QtGui/QSpacerItem>
#include <QtGui/QSpinBox>
#include <QtGui/QVBoxLayout>
#include <QtGui/QWidget>class Ui_widget
{
public:
QWidget *gridLayout;
QGridLayout *gridLayout1;
QSpacerItem *spacerItem;
QHBoxLayout *hboxLayout;
QVBoxLayout *vboxLayout;
QLabel *label;
QSpinBox *spinBox;
QLabel *label_4;
QVBoxLayout *vboxLayout1;
QLabel *label_2;
QSpinBox *spinBox_2;
QLabel *label_5;
QVBoxLayout *vboxLayout2;
QLabel *label_3;
QLineEdit *lineEdit;
QSpacerItem *spacerItem1;void setupUi(QWidget *widget)
{
if (widget->objectName().isEmpty())
widget->setObjectName(QString::fromUtf8("widget"));
widget->resize(400, 300);
widget->setLayoutDirection(Qt::LeftToRight);
gridLayout = new QWidget(widget);
gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
gridLayout->setGeometry(QRect(20, 10, 211, 81));
gridLayout1 = new QGridLayout(gridLayout);
gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
gridLayout1->setContentsMargins(0, 0, 0, 0);
spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);gridLayout1->addItem(spacerItem, 0, 1, 1, 1);
hboxLayout = new QHBoxLayout();
hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
vboxLayout = new QVBoxLayout();
vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
label = new QLabel(gridLayout);
label->setObjectName(QString::fromUtf8("label"));vboxLayout->addWidget(label);
spinBox = new QSpinBox(gridLayout);
spinBox->setObjectName(QString::fromUtf8("spinBox"));vboxLayout->addWidget(spinBox);
hboxLayout->addLayout(vboxLayout);
label_4 = new QLabel(gridLayout);
label_4->setObjectName(QString::fromUtf8("label_4"));
label_4->setTextFormat(Qt::AutoText);hboxLayout->addWidget(label_4);
vboxLayout1 = new QVBoxLayout();
vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
label_2 = new QLabel(gridLayout);
label_2->setObjectName(QString::fromUtf8("label_2"));vboxLayout1->addWidget(label_2);
spinBox_2 = new QSpinBox(gridLayout);
spinBox_2->setObjectName(QString::fromUtf8("spinBox_2"));vboxLayout1->addWidget(spinBox_2);
hboxLayout->addLayout(vboxLayout1);
label_5 = new QLabel(gridLayout);
label_5->setObjectName(QString::fromUtf8("label_5"));hboxLayout->addWidget(label_5);
vboxLayout2 = new QVBoxLayout();
vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));
label_3 = new QLabel(gridLayout);
label_3->setObjectName(QString::fromUtf8("label_3"));vboxLayout2->addWidget(label_3);
lineEdit = new QLineEdit(gridLayout);
lineEdit->setObjectName(QString::fromUtf8("lineEdit"));vboxLayout2->addWidget(lineEdit);
hboxLayout->addLayout(vboxLayout2);
gridLayout1->addLayout(hboxLayout, 0, 0, 1, 1);
spacerItem1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
gridLayout1->addItem(spacerItem1, 1, 0, 1, 1);
retranslateUi(widget);
QMetaObject::connectSlotsByName(widget);
} // setupUivoid retranslateUi(QWidget *widget)
{
widget->setWindowTitle(QApplication::translate("widget", "Calculator", 0, QApplication::UnicodeUTF8));
label->setText(QApplication::translate("widget", "Input 1", 0, QApplication::UnicodeUTF8));
label_4->setText(QApplication::translate("widget", "+", 0, QApplication::UnicodeUTF8));
label_2->setText(QApplication::translate("widget", "Input 2", 0, QApplication::UnicodeUTF8));
label_5->setText(QApplication::translate("widget", "=", 0, QApplication::UnicodeUTF8));
label_3->setText(QApplication::translate("widget", "Output", 0, QApplication::UnicodeUTF8));
Q_UNUSED(widget);
} // retranslateUi};
namespace Ui {
class widget: public Ui_widget {};
} // namespace Ui#endif // UI_CALCULATORFORM_H
brauch ich noch mehr dateien? ich will ja nur ein Fenster haben - das soll ja nix machen - nur da sein ...
(auf jeden Fall Danke für die raschen Antworten
)
-
ok... mal angenommen, du erstellst ein Form mit dem sprechenden Namen
Form
also hast du entsprechend die Datei form.ui
der uic erstellt dir daraus die datei ui_form.h, die Klasse selbst heißt Ui_Form (wenn mich nicht alles täuscht)
als erstes musst du die Form erst implementieren.
Ich persönlich erstell also eine neue KlasseFormImpl
(formimpl.h und formimpl.cpp)Inhalt der formimpl.h
#ifndef FORMIMPL_H #define FORMIMPL_H #include "ui_form.h" // die vom uic erstellte header-datei #include <QMainWindow> // oder was du halt haben willst class FormImpl : public Ui_Form, public QMainWindow { Q_OBJECT public: FormImpl( QObject* parent = 0 ); virtual ~FormImpl(); // usw. }; #endif
formimpl.cpp
#include "formimpl.h" FormImpl::FormImpl( QObject* parent ) : QMainWindow( parent ) { this->setupUi( this ); } FormImpl::~FormImpl { }
die main.cpp sieht wie folgt aus
#include <QApplication> #include "formimpl.h" int main( int argc, char** argv ) { QApplication app( argc, argv ); FormImpl* win = new FormImpl(); win->show(); return app.exec(); }
wenn du alle Dateien hast (form, implementierung und main.cpp) führst du nur
qmake -project
in deinem Verzeichnis aus... damit wird dir eine passende .pro-Datei erstellt, die alle benötigten Informationen enthältweiteres gibts im assistant (http://doc.trolltech.com/4.4/designer-using-a-component.html)
-
so wie du das schreibst, klingt das für mich total logisch - das mein Fenster die neue Klasse ist, daran habe ich nicht gedacht. Ich dachte das man eine Klasse entwirft wenn man was mit dem Fenster machen will, aber da ist mir grade ein Licht aufgegangen.
leider mag mein compiler das immer noch nicht - ich gehe mal auf Fehlersuche ...
formimpl.h:7: Fehler: expected class-name before »,« token <-- wenn ich das " public Ui_Form," rausnehme ist die Fehlermeldung weg ...
formimpl.cpp: In constructor »FormImpl::FormImpl(QObject*)«:
formimpl.cpp:3: Warnung: ungültige Umwandlung von »QObject*« in »QWidget*«
formimpl.cpp:3: Warnung: Argument 1 von »QMainWindow::QMainWindow(QWidget*, Qt::WindowFlags)« wird initialisiert
formimpl.cpp:5: Fehler: »class FormImpl« hat kein Element namens »setupUi« <-- das verstehe ich immer noch nicht - die Methode steht doch auch in den Einführungsbeispielen ...
formimpl.cpp: At global scope:
formimpl.cpp:8: Fehler: Deklaration von »~FormImpl« als Nicht-Funktion <-- und wieso kennt mein Compiler keine Destruktoren? Die kenn ja sogar ich ...
make: *** [formimpl.o] Fehler 1
-
so .. beim Destruktor haben einfach Klammern dahinter gefehlt ()
die setupUi() Funktion habe ich auch in der Funktiontn-Liste von Trolltech nicht gefunden ( http://doc.trolltech.com/4.4/functions.html )
... seltsam ... muss doch irgendwo zu finden sein
-
ach ja ... steht in der automatisch generierten .h-Datei
Dann müsste ja eigentlich meine Klasse (mal alles auf FormImpl umgeändert) die Methode erben, oder nicht?
-
ja, auf diese weise schon.
aber das ist der "multiple inheritance approach" (s. doku), du hattest dagegen erst den "single inheritance approach" (s. doku) probiert, sprich, das funktioniert wieder etwas anders.mfg,
julian
-
und wie sage ich ihm jetzt das er dieses setupUi eigentlich doch kennt?
-
1. qmake && make ausgefuehrt?
2. heisst dein fenster im designer wirklich richtig?
3. http://www.2shared.com/file/3777872/87ae57f8/designerDlgTest.html
(falls das nicht funktioniert mit dem download: http://www.uploading.com/files/0KOW0LL8/designerDlgTest.zip.html)
fuehr da mal qmake&&make bzw. qmake&&mingw32-make aus, wie auch immer ... das muss funktionieren (getestet mit qt4.4.1 windows, mingw32-make)mfg,
julian
-
hab ich shon erwähnt das ich kubuntu habe (das ist ne linux-Distribution)
als kompiler hab ich da g++
edit: das designer-fenster heißt MainWindow-Form.ui (also der erste Teil ist der Titel und der zweite ist die Speichername) kann ich da was falsch machen im Programm? (wird da später nur einer der beiden Namen im richtigen Programm angezeigt? ich will da ja nicht zwei zu stehen haben ...)
Designer testen?
Der kann auch mal nicht funktionieren?
-
oh sorry, steht ja im threadtitel, kubuntu ...
dann eben$qmake $make
g++ -o .... kannst du nicht benutzen, weil qmake dir extra ein makefile erstellt, das von make dann entspr. ver-/bearbeitet wird.
hast du mein beispielprojekt denn mal probiert zu kompilieren? (die links in meinem letzten post)
der name des widgets muss stimmen, im designer also im "eigenschaften" fester (rechte leiste standardmaessig bei qt4.4.1) -> eigenschaft: objectName, wert: "Form" oder wie auch immer das ding heissen soll.
das ist unabhaengig davon, wie das ui-file benannt wird, allerdings wird nach dem objectName die klasse benannt.mfg,
julian
-
hab deins mal eben kompiliert, aber da ist keine ausführbare datei bei rausgekommen ...
also keine Fehler, aber auch kein Draufklickdingens wo dann das fenster erscheint (sollte doch entstehen, oder?)hab jetzt mal den objectnamen auf "Form" umgeändert - jetzt heißt mein fenster Form-Form.ui wenn ichs im Designer aufmache
edit: hab einen bin-Ordner übersehen - da war deine Testdatei drinne - hat reibungslos funktioniert
edit2: warum hab ich das eigentlich nicht hingekriegt? wahrscheinlich zu viel reingeschrieben ...
Übrigens super übersichtliche Einteilung - muss ich mir mal merkenwas kommt dann eigentlich in den "moc"-Ordner rein? In "Obj" sind die Ausgabe-Dateien, richtig?
weitereditier: bei mir kommt nur eine o-datei raus und nicht zwei - dafür aber 'ne moc-Datei?
edit am morgen: sooooo .... endlich hat's auch bei mir gefunzt und ich versuchs jetzt mit was Schwierigerem
, aber ich hab noch ne frage - wozu ist diese Zeile gut?
QObject::connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) );
Weil wenn ich sie auskommentiere klappts auch ...
macht das das Gleiche wie dieser eine Aufruf von QObject von ZWUTZ in seiner formimpl.h ?
-
wozu ist diese Zeile gut?
QObject::connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) );
Vielleicht hilft dir das hier weiter:
http://doc.trolltech.com/4.4/qapplication.html#lastWindowClosed
bzw. das hier http://doc.trolltech.com/4.4/qobject.html#connectwenn dir der begriff 'connect' unklar ist.
mfg
Double *T
-
sorry, der thread erscheint nicht als geaendert, wenn du nur editierst, daher les ich das alles erst jetzt ...
zu den einzelnen verzeichnissen: guck dir das pro-file an (src.pro im bsp. glaub ich), da sind die entspr. variablen fuer die einzelnen ausgabeverzeichnisse definiert.
wozu die variablen im pro-file gut sind, erklaert diese seite: http://doc.trolltech.com/4.4/qmake-variable-reference.htmlmfg,
julian
-
danke - dann sind ja erst mal alle fragen geklärt
nu guck ich mir an wie ich nen bildschirm einbaue - dieses Arthur-ding sieht ganz vielversprechend aus ...
grüße vom
füchslein