जवाबों:
आप उसके लिए उपयोग QMessageBox::question
करेंगे।
एक काल्पनिक विजेट के स्लॉट में उदाहरण:
#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";
}
}
क्यूटी 4 और 5 पर काम करना चाहिए, QT += widgets
क्यूटी 5 पर आवश्यकता है , और आउटपुट CONFIG += console
देखने के लिए Win32 पर qDebug()
।
StandardButton
आपके द्वारा उपयोग किए जा सकने वाले बटनों की सूची प्राप्त करने के लिए enum देखें ; फ़ंक्शन उस बटन को लौटाता है जिसे क्लिक किया गया था। आप एक अतिरिक्त तर्क के साथ एक डिफ़ॉल्ट बटन सेट कर सकते हैं ( यदि आप नहीं या निर्दिष्ट करते हैं तो Qt " एक उपयुक्त डिफ़ॉल्ट स्वचालित रूप से चुनता है " QMessageBox::NoButton
)।
आप संदेश बॉक्स बनाने के लिए QMessage ऑब्जेक्ट का उपयोग कर सकते हैं फिर बटन जोड़ सकते हैं:
QMessageBox msgBox;
msgBox.setWindowTitle("title");
msgBox.setText("Question");
msgBox.setStandardButtons(QMessageBox::Yes);
msgBox.addButton(QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
if(msgBox.exec() == QMessageBox::Yes){
// do something
}else {
// do something else
}
setIcon
का मेथड पार्ट है QMessageBox
। एक के रूप में अगर ये इन QMessageBox::NoIcon
QMessageBox::Question
QMessageBox::Information
पैराशूटर्स के
मुझे tr
जवाबों में अनुवाद कॉल याद आ रही है।
सबसे सरल समाधानों में से एक, जो बाद के अंतर्राष्ट्रीयकरण के लिए अनुमति देता है:
if (QMessageBox::Yes == QMessageBox::question(this,
tr("title"),
tr("Message/Question")))
{
// do stuff
}
आमतौर पर कॉल के Qt
भीतर कोड-लेवल स्ट्रिंग्स लगाना एक अच्छी आदत है tr("Your String")
।
( QMessagebox
जैसा कि किसी भी QWidget
तरीके से ऊपर काम करता है )
संपादित करें:
आप QMesssageBox
एक QWidget
संदर्भ के बाहर उपयोग कर सकते हैं , @ TobySpeight का उत्तर देखें।
यदि आप एक के बाहर भी कर रहे हैं QObject
संदर्भ, की जगह tr
के साथ qApp->translate("context", "String")
- आप की आवश्यकता होगी#include <QApplication>
QMessageBox
ऐसे प्रश्नों को जल्दी से पूछने के लिए स्थिर तरीके शामिल हैं:
#include <QApplication>
#include <QMessageBox>
int main(int argc, char **argv)
{
QApplication app{argc, argv};
while (QMessageBox::question(nullptr,
qApp->translate("my_app", "Test"),
qApp->translate("my_app", "Are you sure you want to quit?"),
QMessageBox::Yes|QMessageBox::No)
!= QMessageBox::Yes)
// ask again
;
}
यदि आपकी आवश्यकताएं स्थैतिक विधियों द्वारा प्रदान की तुलना में अधिक जटिल हैं, तो आपको एक नई QMessageBox
वस्तु का निर्माण करना चाहिए , और exec()
इसे अपने स्वयं के ईवेंट लूप में दिखाने के लिए इसकी विधि को कॉल करना चाहिए और दबाया गया बटन पहचानकर्ता प्राप्त करना चाहिए। उदाहरण के लिए, हम "नो" को डिफ़ॉल्ट उत्तर बनाना चाहते हैं:
#include <QApplication>
#include <QMessageBox>
int main(int argc, char **argv)
{
QApplication app{argc, argv};
auto question = new QMessageBox(QMessageBox::Question,
qApp->translate("my_app", "Test"),
qApp->translate("my_app", "Are you sure you want to quit?"),
QMessageBox::Yes|QMessageBox::No,
nullptr);
question->setDefaultButton(QMessageBox::No);
while (question->exec() != QMessageBox::Yes)
// ask again
;
}
QApplication
मैं सुझाव qApp->translate("context", "String")
देता हूं कि मैं कक्षा के tr
बाहर उपयोग करने के लिए जगह लेता QObject
यदि आप इसे अजगर में बनाना चाहते हैं, तो आपको इस कोड को अपने कार्यक्षेत्र में जांचना होगा। इस तरह भी लिखें। हमने अजगर के साथ एक पॉपअप बॉक्स बनाया।
msgBox = QMessageBox()
msgBox.setText("The document has been modified.")
msgBox.setInformativeText("Do you want to save your changes?")
msgBox.setStandardButtons(QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
msgBox.setDefaultButton(QMessageBox.Save)
ret = msgBox.exec_()