[Qt] Kommunikation zwischen zwei Fenster(-klassen)



  • Hallo zusammen! 🙂

    Ich habe vor kurzem angefangen, mit Qt zu programmieren. Ich habe bereits auch ein kleines Programm geschrieben, das allerdings nur in einem Fenster läuft.
    Nun wollte ich ein Programm entwickeln, das jedoch mehr als ein Fenster benötigt (Hauptfenster, Einstellungsfenster, ...). Nun ist die Frage, wenn ich aus dem Hautpfenster das Einstellungsfenster aufrufe:
    1.: Wie kann ich Daten dem Einstellungsfenster mitgeben, wenn es aufgerufen wird?
    2.: Wie kann ich die eingegebenen Daten vom Einstellungsfenster auswerten, wenn es geschlossen wird?

    Ach ja, falls es notwendig ist, die Fensterklassen sind in unterschiedlichen Dateien untergebracht. Und die Obertypen sind auch unterschiedlich:
    Hauptfenster: QMainWindow
    Einstellungsfenster: QWidget

    Ich hoffe, Ihr könnt mir helfen! 😕
    Vielen, vielen Dank schonmal! 😉
    mfg Paul



  • Mach Einstellungsfenster -> QDialog.
    Erstell im entsprechenden SLOT (z.B. MyMainWindow::configureApp()) eine Instalnz deines Dialogs.
    Dem Dialog gibst du jetzt Methoden, mit denen man bestimmte Sachen setzen kann (das was du dem Dialog "mitgeben" willst). Diese Methoden rufst du auf, nachdem du deine Dialog-Instanz erstellt hast (logisch 😉
    Ein QDialog hat jetzt eine wunderbare Methode "exec()", welche du aufrufst.
    Der Rückgabewert ist Accepted oder Rejected. Bei einem Rejected machst du natürlich nix, bei dem Accepted hingegebn kannst du wiederum über Methoden, die du deinem Dialog spendierst, die einzelnen Einstellungen abfragen.

    Hoffe das war jetzt einigermaßen klar, wenn nicht kannst dudich auch mal umschauen in den Qt-Examples, die eigentlich mitinstalliert sein sollten. Wenn nicht -> qt.nokia.com -> Download -> qt-everywhere-src.



  • Danke l'abra d'or! 😉 Noch eine Frage: Wie gebe ich denn beim QDialog entweder Accepted oder Rejected zurück?

    Vielen Dank!
    mfg Paul



  • Paulfred schrieb:

    Wie gebe ich denn beim QDialog entweder Accepted oder Rejected zurück?

    Du hast zwei SLOTs:
    QDialog::accept()
    QDialog::reject()
    Einfach mit dem SIGNAL clicked() von nem Button verbinden.
    Also ungefähr so:

    MyDialog::MyDialog( QWidget* parent )
     : QDialog(parent)
    {
      // code
      connect(ui.ok_button, SIGNAL(clicked()), SLOT(accept()));
      connect(ui.cancel_button, SIGNAL(clicked()), SLOT(reject()));
      // noch mehr code
    }
    


  • Danke! 😃 Jetzt funktioniert alles einwandfrei! 😉

    Vielen Dank!
    mfg Paul

    *** CLOSE


Anmelden zum Antworten