QT 4 Gehirnverkrampfungen



  • Hallo Leute,

    bin neu hier, habe zwar auch schon ein wenig danach gesucht auch hier im Forum, nur so langsam stellt sich bei mir die Frustration ein. Ich habe folgendes, eigentlich einfaches Problem.

    Ich möchte mit dem QT Designer (qt 4.0) irgendwas erstellen. Ganz einfach ein Button. Den speicher ich dann ab als try.ui
    Nun weiß ich nicht, wie ich weiter machen soll. Ich habe oft im Internet gelesen, dass man mit dem Tool uic aus der UI - Datei eine H und CPP Datei erstellen kann.

    uic -o try.h try.ui

    Das funktioniert auch, aber hierbei ist die H Datei eigentlich mehr ein CPP Datei, nach meinen Erfahrungen (das hat aber nichts zu sagen)

    Wenn ich dann

    uic -o try.cpp -i try.h try.ui

    Dabei sollte ja eigentlich die CPP Datei erstellt werden, aber da kommt nur die Hilfe von uic. Es gibt also keinen Parameter -i

    Denke mal, dass was auf der Internetseite steht ist für eine alte Version.

    Nun ist meine Frage, weil ich langsam zu viel bekomme, was muss ich nun machen? Ich möchte unter MacOS Tiger mit dem QT Designer 4 ein einfaches Beispiel aus der UI Datei kompilieren, so dass ich diese kompilieren und starten kann. Kann mir da mal jemand helfen ?

    Und bitte nicht sagen, erst suchen, dann fragen, weil irgendwie sind die Antworten auf ähnliche Fragen nicht funktionstüchtig für mich.

    Danke schonmal.

    Viele Grüße,
    Hauke



  • mach doch einfach ne pro datei mittels qmake -proejct und anschließend kompilierst du mittels qmake

    MfG
    xmarvel



  • Hi

    Also mit qmake habe ich folgendes gemacht im Ordner
    .../try01

    Die UI Datei heißt myform.ui

    qmake -project
    qmake

    danach habe ich
    Makefile
    myform.ui
    try01.pro

    was soll ich denn dann machen? "make" resultiert in einem Fehler

    c++ -headerpad_max_install_names -o try01.app/Contents/MacOS/try01 -F/usr/local/Trolltech/Qt-4.0.1/lib -L/usr/local/Trolltech/Qt-4.0.1/lib -L/Users/haukegulich/Desktop/Download/qt4/qt-mac-opensource-src-4.0.1/lib -framework QtGui -F/Users/haukegulich/Desktop/Download/qt4/qt-mac-opensource-src-4.0.1/lib -framework Carbon -framework QuickTime -framework QtCore -lz -framework ApplicationServices
    /usr/bin/ld: Undefined symbols:
    _main
    collect2: ld returned 1 exit status
    make: *** [try01.app/Contents/MacOS/try01] Error 1

    und noch eine Frage, warum heißt die PRO Datei denn try01 wie der Ordner? Holt der sich den Namen aus dem Ordner? Oder ist das in der ui Datei mit drin, denn ich glaube ich hatte das "form" im Designer auch try01 genannt.

    Danke schonmal
    Hauke



  • qmake -project holt sich den namen wie der ordner heisst kannst aber auch explizit angeben schau einfach in die manpage nach dem argument.
    Du brauchst noch eine main File kannst entweder per hand erstellen oder im GUI Designer da kannste die auch anlegen anschließend wieder qmake -project && qmake ausführen.

    MfG
    xmarvel



  • Hi

    Wir kommen der Sache schon näher 🙂

    Ich habe versucht über den Designer ne main.cpp erzeugen zu lassen, das ging aber leider nicht. Irgendwie ist der Designer von 4.0 nicht so klasse, egal.
    Ich habe im Internet ein standart main.cpp gefunden:

    #include <iostream>
    #include <qapplication.h>
    using namespace std;

    int main(int c, char ** v) {
    QApplication app(c, v);

    app.exec();
    }

    dort stand, die sollte gehen.

    Diese Datei habe ich zusammen mit der UI Datei in einem ordner, dort dann qmake -project und qmake gemacht. Danach konnte ich make machen und siehe da, wir hatten

    Makefile
    main.cpp
    main.o
    try02.app
    try02.pro
    untitled.ui

    Tut mir leid wegen den Namen 🙂

    Aber wenn ich nun die app Datei öffne kommt unter Mac OS nichts. Er startet das Programm zwar, aber man sieht nichts. Man kann es nur wieder beenden.

    Dafür noch eine Idee ? Bei make kommt kein Fehler !

    Danke nochmals

    Hauke



  • hi GandalfMobil,

    du rufst ja auch nie dein Dialog auf du kannst die main.cpp umschreiben indem du zuerst "myform.h" includest und anschließend dein Dialog erstellst.

    #include <qapplication.h>
    #include "myform.h"
    
    int main( int argc, char ** argv )
    {
        QApplication a( argc, argv );
        MyForm w;
        w.show();
        a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
        return a.exec();
    }
    }
    

    Aber es geht auch defnitiv mit dem Qt Designer hast vielleicht die Reihenfolge beim Erstellen nicht beachtet:
    Zuerst ein c++ project -> Dialog oder sonstwas erstellen -> C++ Main File

    und mittels qmake -project && qmake && make
    Aber es gibt auch Tutorials von Qt die das alles noch genauer erklären also mal bei trolltech vorbeischauen.

    MfG
    xmarvel



  • Hi,

    erstmal super viel Dank das du mir echt so geduldig antwortest !!!

    Das ich das nicht in die main.cpp geschrieben hatte, ist mir in der Nacht auch eingefallen 🙂

    Nun habe ich das mal so gemacht, wie du geschrieben hast, aber zuvor:

    Im QT 4.0 Designer (open source) kann man scheinbar keine Projekte mehr anlegen und er erstellt auch keine main.cpp Datein mehr. Bei 3.0 ging das noch, aber nun ist es nicht mehr da. Habe ich im Internet auch schon gelesen, dass sich da viele drüber beschweren.

    Auf jeden Fall habe ich nun deine main.cpp genommen, aber ich denke ich muss
    MyForm w;

    wohl das machen, was in der .h Datei steht:

    #ifndef TRY03_H
    #define TRY03_H

    #include <QtCore/QVariant>
    #include <QtGui/QAction>
    #include <QtGui/QApplication>
    #include <QtGui/QButtonGroup>
    #include <QtGui/QMainWindow>
    #include <QtGui/QPushButton>
    #include <QtGui/QWidget>

    class Ui_MainWindow
    {
    public:
    QWidget *centralWidget;
    QPushButton *pushButton;

    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"));
    pushButton = new QPushButton(centralWidget);
    pushButton->setObjectName(QString::fromUtf8("pushButton"));
    pushButton->setGeometry(QRect(330, 90, 109, 32));
    MainWindow->setCentralWidget(centralWidget);
    retranslateUi(MainWindow);

    QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
    MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8));
    pushButton->setText(QApplication::translate("MainWindow", "PushButton", 0, QApplication::UnicodeUTF8));
    Q_UNUSED(MainWindow);
    } // retranslateUi
    };

    namespace Ui {
    class MainWindow: public Ui_MainWindow {};
    } // namespace Ui

    #endif // TRY03_H

    also den Klassennamen Ui_MainWindow

    Wenn ich das mache, kommt folgende Fehlermeldung bei make

    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:8: error: 'class Ui_MainWindow' has no member named 'show'
    make: *** [main.o] Error 1

    Es ist egal, ob ich MyForm oder Ui_MainWindow oder so drin stehen habe.

    Entweder ist bei mir irgendwas total vermurkst oder ich muss mich einfach noch mehr damit beschäftigen 😞

    Danke aber schonmal, falls du auch darauf noch eine Idee hast.

    Bis dann
    Hauke



  • Also erstmal vorweg hab Qt4 nicht installiert und mir noch nicht angechaut kann mir aber nicht vorstellen das sie soviel an den Grundlegenden Sachen was umgestellt haben. Also kann schon sein das der Qt Designer nicht mehr ne Main.cpp anbietet.
    Aber schau mal auf der Seite mal nach http://doc.trolltech.com/4.0/designer-using-a-component.html so wie es aussieht hat Qt4 namespaces eingeführt also musst noch ein Qt:: oder Ui:: vor deiner Klasse dransetzen.

    MfG
    xmarvel


Anmelden zum Antworten