Nach Verstecken eines Zweitfensters im Hauptfenster Methode ausführen



  • Hallo.
    [OffTopic]
    Dies ist mein erster Post in diesem Forum und wird wohl auch nicht mein letztes sein.
    Ich habe diese Woche Qt entdeckt, da ich mein aktuelles Projekt betriebssystemunabhängig programmieren möchte und mir für eben dies Qt mehrfach empfohlen wurde. Nun habe ich mich in den letzten Tagen recht gut zurecht gefunden und so einige Seiten in den Helpfiles gelesen und konnte meine Probleme bisher auch immer irgendwie selber lösen.
    So nun zu meiner Frage:
    [/OffTopic]

    Ich habe ein Hauptfenster, welches im Konstruktor ein weiteres Fenster erstellt, dass dann wiederrum durch Buttonclick angezeigt wird.
    Nun möchte ich, wenn das zweite Fenster geschlossen, bzw wieder versteckt wird, dass im Hauptfenster eine Methode aufgerufen wird. (Im 2. Fenster werden Ordner gewählt, und zu einer Liste hinzugefügt. Diese Liste soll dann im Hauptfenster nach Dateien durchsucht werden)
    Es wäre wohl eine Möglichkeit, wenn das 2. Fenster vom 1. erbt, das möchte ich aber nicht machen, da das erste Fenster dann hinterher zu einem eigenem Widget umfunktioniert werden soll und das 2. Fenster eben auch.
    Ich stehe da wirklich auf dem Schlauch. Es muss doch eine Möglichkeit geben, zwischen 2 Fenstern zu "kommunizieren".

    Danke schonmal im Vorraus für Antworten und ich hoffe, dass die frage nicht zu dumm ist

    Um es ein wenig verständlicher zu machen:

    1. Fenster:
      @MediaLibrary::MediaLibrary(QWidget *parent)
      {
      optionsBtn = new QPushButton(tr("Optionen"), this);
      optionsBtn->setGeometry(QRect(QPoint(340, 570), QSize(120, 25)));
      connect(optionsBtn, SIGNAL(clicked()), this, SLOT(showOpts()));

      optGUI = new OptionsGUI(this);
      }

    void MediaLibrary::showOpts(void)
    {
    optGUI->show();
    }
    @

    Hier das Zweite:
    @
    OptionsGUI::OptionsGUI(QWidget *parent) :
    QMainWindow(parent)
    {
    closeBtn = new QPushButton(tr("Schließen"), this);
    connect(closeBtn, SIGNAL(clicked()), this, SLOT(close()));
    }

    void OptionsGUI::close()
    {
    //hier dem Hauptfenster mitteilen, dass es was machen soll
    this->hide();
    }
    @



  • "Fenster" sind kein eigenständiges Konzept in Qt. Fenster sind angezeigte QWidgets, die keinen Parent haben. Die Kommunikation zwischen Widgets erfolgt üblicherweise über Signale und Slots, die hast du schon verwendet. Soweit gut :-)

    OptionsGUI kann zum Beispiel ein Signal verwenden, in dem die ausgewählten Ordner als Stringliste enthalten sind. MediaLibrary kann auf dieses Signal verbinden.

    Wichtig ist zu wissen, dass im Single-Thread-Fall (wie hier im Beispiel) Slot-Aufrufe synchron sind. Das heisst, wenn in OptionsGUI::close ein "emit selectedFolders(Folders);" ausgeführt wird, wird der entsprechende Slot in MediaLibrary ausgeführt, bevor das emit-Statement zurückkehrt.

    OptionsGUI könnte sich auch den Zeiger auf MediaLibrary merken. Das würde aber eine Kopplung der beiden Klassen bedeuten, die vielleicht unnötig ist.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.