Ein neuer Dialog

Wir möchten nun in unserem Programm einen neuen Dialog anzeigen hierzu verwende ich den „multiple inheritance approach“ das hat den Vorteil das wir auf unserem neuen Dialog weiterhin mit Slots wie on_Button_clicked() arbeiten können. Ansonsten bleibt es dem Programmierer selbst überlassen welchen der drei Ansätze er verwendet.(direct, single oder multiple)

Als erstes erstellen wir ein neues .ui Formular in unserem Fall erstellen wir einen einfachen Info Dialog also auf Datei->Neu hier wählen wir Qt Qt-Designer Formular.

anschließend werden einem ein paar Vorlagen angeboten wir wählen aber ein blankes Widget.

jetzt müssen wir noch einen Namen und den Pfad vergeben. Wir belassen ihn im Beispiel bei form.ui

schließlich wird noch gefragt zu welchem Projekt wir den Dialog gerne hinzufügen würden?

in unserem Fall Egal.pro

wir haben einen Neuen Dialog erstellt unter Formulardatein im Projektbrowser befindet sich nun form.ui ebenso wurde unter Egal.pro ein zusätzlicher Eintrag bei FORMS hinzugefügt.

Der neu erstellte Dialog ist ersteinmal blank jetzt befüllen wir ihn nach belieben mit funktionen in unserem Fall ein Info Label und einen ok Button.

Jetzt müssen wir nur noch Irgendwie unseren neuen Info Dialog angezeigt bekommen dazu erstellen wir einen neuen Action Eintrag neben dem alten Datei Eintrag wie unter Punkt Menu Bar leicht gemacht. Es muss nicht unbedingt ein neuer Menüeintrag sein sie können genausogut einen Button Checkbox oder ähnliches verwenden.

mein Unterpunkt heisst hier Über Qt ->Qt info nun fügen wir in Mainwindow die mainwindow::on_actionQt_Info_triggered() funktion ein.

In mainwindow.h fügen wir einen neuen QDialog mit einem Pointer auf den Dialog ein.

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "ui_form.h"//<<---Hier wird die automatisch erzeugte Headerdatei von form.ui eingebunden 
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Ui::MainWindow *ui;
    QDialog *newform; //<--------- Pointer auf QDialog
    Ui::Form Form;    //<--------- Neuer Dialog
    QString numbOne;
protected:
    void timerEvent(QTimerEvent *event);
private slots:
    void on_actionSlider_triggered();
    void on_actionLaden_triggered();
    void on_actionSpeichern_triggered();
    void on_actionQt_Info_triggered();
    void resetall();
};
#endif // MAINWINDOW_H

Form ist der object Name den wir im Designer eigenschaften Browser ändern können.
in mainwindow.cpp fügen wir einen new QDialog ein um unsere neue form.ui im Speicher abzulegen.

void MainWindow::on_actionQt_Info_triggered()
{
    newform =new QDialog;
    newform->setModal(true);
    Form.setupUi(newform);
    newform->show();
    connect (Form.pushButton, SIGNAL(clicked()),newform,SLOT(close()));
}

Fertig ist unser neuer Dialog den connect könnten wir auch wieder über die roten Fäden bei Signal und Slots erstellen wurde hier aber per Code gemacht um zu verdeutlichen wie der zugriff auf die Elemente auf dem neuen QDialog Form erfolgt. Mit Form. können alle widgets auf dem neuen Dialog angesprochen werden mit dem Pointer newform-> können alle Funktionen von QDialog aufgerufen werden.

setModal(true) sorgt dafür das solange dieser Dialog geöffnet ist andere Dialoge nicht mehr bedient werden können.

Versuchen sie am besten die anderen beiden Approaches zur Übung auch noch aus, um den für sie am besten geigneten  Ansatz zu verwenden.