Sie müssen den Dialog mit der Benutzeroberfläche aus Ihrer Datei .ui
einrichten. Der Qt uic
Compiler generiert eine Header-Datei aus Ihrer .ui
Datei, die Sie in Ihren Code aufnehmen müssen. Angenommen, Ihre .ui
Datei heißt about.ui
, und der Dialog heißt About
, dann erstellt uic
die Datei ui_about.h
, die eine Klasse Ui_About
enthält. Es gibt verschiedene Ansätze die Benutzeroberfläche einrichten, bei einfachsten Sie
#include "ui_about.h"
...
void MainWindow::on_actionAbout_triggered()
{
about = new QDialog(0,0);
Ui_About aboutUi;
aboutUi.setupUi(about);
about->show();
}
Ein besserer Ansatz tun können, ist die Vererbung zu verwenden, da es Ihre Dialoge besser kapselt, so dass Sie jede Funktionalität speziell für den bestimmten Dialog umsetzen können innerhalb der Unterklasse:
AboutDialog.h:
#include <QDialog>
#include "ui_about.h"
class AboutDialog : public QDialog, public Ui::About {
Q_OBJECT
public:
AboutDialog(QWidget * parent = 0);
};
AboutDialog.cpp:
AboutDialog::AboutDialog(QWidget * parent) : QDialog(parent) {
setupUi(this);
// perform additional setup here ...
}
Verbrauch:
#include "AboutDialog.h"
...
void MainWindow::on_actionAbout_triggered() {
about = new AboutDialog(this);
about->show();
}
In jedem Fall ist der wichtige Code ist die setupUi()
Methode aufzurufen.
BTW: Ihr Dialog im obigen Code ist nicht modal. Um einen modalen Dialog anzuzeigen, setzen Sie entweder das windowModality
Flag Ihres Dialogs auf Qt::ApplicationModal
oder verwenden Sie exec()
anstelle von show()
.
Danke, Andreas! Der einfachste Weg für den Moment ... Tatsache ist, dass das ui_about.h nicht erstellt wurde und jetzt nicht voreingestellt ist. Also das Projekt mit dem Code, den Sie zuerst angegeben haben, kompiliert nicht. Gibt es eine Möglichkeit, ui_about.h manuell zu erstellen? .. –
Sie können es manuell mit 'uic about.ui -o ui_about.h' erstellen. Aber Ihr Build-System sollte sich darum kümmern - stellen Sie sicher, dass 'FORMS = about.ui' in Ihrer' .pro' Datei enthalten ist. –
Haben Sie seltsame Einträge in der .pro-Datei? Es gab ein ähnliches Problem vor einiger Zeit mit Ressourcen-Dateien nicht erstellt werden: http://StackOverflow.com/Questions/12380171/qmake-not-generating-binary-Resource-Files/12431570#12431570 –