जवाबों:
आप उसके लिए उपयोग 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_()