Je veux créer une simple boîte de dialogue modale "À propos", appelée depuis le menu Aide-> À propos de l'application. J'ai créé une fenêtre de dialogue modale avec QT Creator (fichier .ui).
Quel code doit être dans le menu "À propos" de l'emplacement?
Maintenant, j'ai ce code, mais il affiche une nouvelle boîte de dialogue modale (non basée sur mon about.ui):
void MainWindow::on_actionAbout_triggered()
{
about = new QDialog(0,0);
about->show();
}
Merci!
Vous devez configurer la boîte de dialogue avec l'interface utilisateur vous à partir de votre fichier .ui
. Le compilateur Qt uic
génère un fichier d'en-tête à partir de votre fichier .ui
Que vous devez inclure dans votre code. Supposons que votre fichier .ui
Est appelé about.ui
, Et que la boîte de dialogue est nommée About
, puis uic
crée le fichier ui_about.h
, Contenant une classe Ui_About
. Il existe différentes approches pour configurer votre interface utilisateur, au plus simple vous pouvez le faire
#include "ui_about.h"
...
void MainWindow::on_actionAbout_triggered()
{
about = new QDialog(0,0);
Ui_About aboutUi;
aboutUi.setupUi(about);
about->show();
}
Une meilleure approche consiste à utiliser l'héritage, car il encapsule mieux vos boîtes de dialogue, afin que vous puissiez implémenter toute fonctionnalité spécifique à la boîte de dialogue particulière dans la sous-classe:
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 ...
}
tilisation:
#include "AboutDialog.h"
...
void MainWindow::on_actionAbout_triggered() {
about = new AboutDialog(this);
about->show();
}
Dans tous les cas, le code important est d'appeler la méthode setupUi()
.
BTW: Votre boîte de dialogue dans le code ci-dessus n'est pas modale. Pour afficher une boîte de dialogue modale, définissez le drapeau windowModality
de votre boîte de dialogue sur Qt::ApplicationModal
Ou utilisez exec()
au lieu de show()
.
Pour les boîtes de dialogue modales, vous devez utiliser la méthode exec()
de QDialogs.
about = new QDialog(0, 0);
// The method does not return until user closes it.
about->exec();
// In this point, the dialog is closed.
Docs dites:
La façon la plus courante d'afficher une boîte de dialogue modale est d'appeler sa fonction
exec()
. Lorsque l'utilisateur ferme la boîte de dialogue,exec()
fournira une valeur de retour utile.
Autre moyen: vous n'avez pas besoin d'une boîte de dialogue modale. Laissez la boîte de dialogue afficher non modale et connectez ses signaux accepted()
et rejected()
aux emplacements appropriés. Ensuite, vous pouvez placer tout votre code dans l'emplacement accepter au lieu de les placer juste après show()
. Ainsi, en utilisant cette méthode, vous n'auriez pas réellement besoin d'une boîte de dialogue modale.