Comment afficher une boîte de message avec des boutons Oui / Non dans Qt et comment vérifier lequel d’entre eux a été appuyé?
Ie une boîte de message qui ressemble à ceci:
la source
Comment afficher une boîte de message avec des boutons Oui / Non dans Qt et comment vérifier lequel d’entre eux a été appuyé?
Ie une boîte de message qui ressemble à ceci:
Vous utiliseriez QMessageBox::question
pour cela.
Exemple dans l'emplacement d'un widget hypothétique:
#include <QApplication>
#include <QMessageBox>
#include <QDebug>
// ...
void MyWidget::someSlot() {
QMessageBox::StandardButton reply;
reply = QMessageBox::question(this, "Test", "Quit?",
QMessageBox::Yes|QMessageBox::No);
if (reply == QMessageBox::Yes) {
qDebug() << "Yes was clicked";
QApplication::quit();
} else {
qDebug() << "Yes was *not* clicked";
}
}
Devrait fonctionner sur Qt 4 et 5, nécessite QT += widgets
sur Qt 5 et CONFIG += console
sur Win32 pour voir la qDebug()
sortie.
Consultez l' StandardButton
énumération pour obtenir une liste des boutons que vous pouvez utiliser; la fonction renvoie le bouton sur lequel l'utilisateur a cliqué. Vous pouvez définir un bouton par défaut avec un argument supplémentaire (Qt " choisit automatiquement une valeur par défaut appropriée " si vous ne le faites pas ou spécifiez QMessageBox::NoButton
).
Vous pouvez utiliser l'objet QMessage pour créer une boîte de message puis ajouter des boutons:
la source
setIcon
partie méthodeQMessageBox
objet. avec un si ces énumérations en tant que paramètres:QMessageBox::NoIcon
QMessageBox::Question
QMessageBox::Information
doc.qt.io/qt-4.8/qmessagebox.html#icon-propQT peut être aussi simple que celui de Windows. Le code équivalent est
la source
Je manque l'appel de traduction
tr
dans les réponses.Une des solutions les plus simples, qui permet une internationalisation ultérieure:
Il est généralement
Qt
recommandé de placer des chaînes au niveau du code dans untr("Your String")
appel.(
QMessagebox
comme ci-dessus fonctionne dans n'importe quelleQWidget
méthode)ÉDITER:
vous pouvez utiliser en
QMesssageBox
dehors d'unQWidget
contexte, voir la réponse de @ TobySpeight.Si vous êtes même en dehors d'un
QObject
contexte, remplacez-letr
parqApp->translate("context", "String")
- vous devrez#include <QApplication>
la source
QMessageBox
inclut des méthodes statiques pour poser rapidement de telles questions:Si vos besoins sont plus complexes que ceux fournis par les méthodes statiques, vous devez construire un nouvel
QMessageBox
objet et appeler saexec()
méthode pour l'afficher dans sa propre boucle d'événements et obtenir l'identifiant du bouton enfoncé. Par exemple, nous pourrions vouloir faire "Non" comme réponse par défaut:la source
QApplication
je suggère d'utiliserqApp->translate("context", "String")
, qui remplacetr
pour une utilisation en dehors d'uneQObject
classeSi vous voulez le faire en python, vous devez vérifier ce code dans votre atelier. écrivez aussi comme ça. nous avons créé une boîte contextuelle avec python.
la source