Qt Creator: Fenster und Oberfläche verbinden



  • Hi,
    ich versuche gerade eine mit Qt Designer erstellte Oberfläche (meinGUI.ui) anzeigen zu lassen.
    Dazu habe ich die main.cpp Datei so bearbeitet, dass die Oberfläche aus dem Formular meinGUI.ui angezeigt werden sollte.

    Die main.cpp Datei:

    #include "mainwindow.h"
    #include <QApplication>
    #include "ui_meinGUI.h"
    
    int main(int argc, char *argv[])
    {
        QApplication meinFormular(argc, argv);
        //ein neues Hauptfenster erzeugen
        QMainWindow* meinFenster = new QMainWindow();
        //eine Instanz der Oberfläche erzeugen
        MainWindow meinGUI;
        //das Fenster und die Oberfläche verbinden
        meinGUI.setupUi(meinFenster);//no member named 'setupUi' in 'MainWindow'
        //den Dialog anzeigen
        meinFenster->show();
        return meinFormular.exec();
    }
    

    Jedoch bekomme ich bei

    meinGUI.setupUi(meinFenster);
    

    Die Fehlermeldung:
    no member named 'setupUi' in 'MainWindow'
    Diese Anweisung sollte eigentlich die Oberfläche und den Container verbinden.
    Dazu muss die Methode setupUi() der Instanz der Klasse mit der Oberfläche aufgerufen werden.
    Also die Instanz meinGUI.
    "setupUi" ist kein Element von "MainWindow"
    "setupUi" ist auch kein Element von "QMainWindow"

    Ich bin sehr dankbar über jede Art von Unterstützung.



  • Die Funktion ist Member der generierten Klasse.

    Wenn du die Oberfläche direkt im Creator generierst, statt den Umweg über den externen Designer zu gehen, wird es leichter.



  • Der Designer ist hier wirklich ein unnötiger Umweg.
    Ich frage mich hier nur, ob "meinGUI" vielleicht Instanz einer anderen Klasse sein sollte.
    Oder besser gefragt, zu welcher Klasse gehört die Methode setupUi()?
    Letztlich ist hier nur das Ziel, einmal eine externe ui Datei einzubinden.



  • @theAnfänger77

    zu welcher Klasse gehört die Methode setupUi()?

    @manni66 sagte in Qt Creator: Fenster und Oberfläche verbinden:

    Die Funktion ist Member der generierten Klasse.



  • Was ist hier denn die generierte Klasse?



  • @theAnfänger77 sagte in Qt Creator: Fenster und Oberfläche verbinden:

    Was ist hier denn die generierte Klasse?

    Die die der UIC aus der uni-Datei generiert.



  • Also diese Klasse Ui_Dialog 🙂
    Vielen Dank!

    So geht es:

    #include "mainwindow.h"
    #include <QApplication>
    #include "ui_meinGUI.h"
    
    int main(int argc, char *argv[])
    {
        QApplication meinFormular(argc, argv);
        //ein neues Hauptfenster erzeugen
        //QMainWindow* meinFenster = new QMainWindow();
        QDialog* meinFenster = new QDialog();
        //eine Instanz der Oberfläche erzeugen
        Ui_Dialog meinGUI;
        //das Fenster und die Oberfläche verbinden
        meinGUI.setupUi(meinFenster);
        //den Dialog anzeigen
        meinFenster->show();
        return meinFormular.exec();
    }
    


  • So geht es zwar, so ist es aber nicht gedacht oder für eine echte Anwendung sinnvoll.

    Du sollst eine Klasse von QDialog ableiten, die ein Member der UI-Klasse hat.



  • "mainwindow.h" brauche ich auch nicht mehr.
    Würde dann so aussehen:

    #include <QApplication>
    #include <ui_meinGUI.h>
    
    class abgeleiteteKlasse : public Ui_Dialog{};
    
    int main(int argc, char *argv[])
    {
        QApplication meinFormular(argc, argv);
        //ein neues Hauptfenster erzeugen
        QDialog* meinFenster = new QDialog();
        //eine Instanz der Oberfläche erzeugen
        abgeleiteteKlasse meinGUI;
        //das Fenster und die Oberfläche verbinden
        meinGUI.setupUi(meinFenster);
        //den Dialog anzeigen
        meinFenster->show();
        return meinFormular.exec();
    }
    


  • @theAnfänger77 Das ist ja nett und schön wenn man weiß wie es funktioniert. Nur für Production und wartungsfreundlichen Code ist das nichts.


Log in to reply