উত্তর:
আপনি যে জন্য 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";
}
}
Qt 4 এবং 5 এ কাজ করা উচিত, QT += widgetsকিউটি 5 এবং CONFIG += consoleউইন 32 এ qDebug()আউটপুট দেখতে প্রয়োজন ।
আপনি যে StandardButtonবোতামগুলি ব্যবহার করতে পারেন তার একটি তালিকা পেতে এনাম দেখুন ; ফাংশনটি ক্লিক করা বোতামটি ফিরিয়ে দেয়। আপনি অতিরিক্ত আর্গুমেন্টের সাথে একটি ডিফল্ট বোতাম সেট করতে পারেন (কিউটি "যদি আপনি নির্দিষ্ট না করেন বা নির্দিষ্ট না করেন তবে" স্বয়ংক্রিয়ভাবে উপযুক্ত ডিফল্ট চয়ন করে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
}
আমি উত্তরে অনুবাদ কল মিস করছি tr।
অন্যতম সহজ সমাধান যা পরবর্তীকালের আন্তর্জাতিকীকরণের জন্য অনুমতি দেয়:
if (QMessageBox::Yes == QMessageBox::question(this,
tr("title"),
tr("Message/Question")))
{
// do stuff
}
Qtএকটি tr("Your String")কলের মধ্যে কোড-স্তরের স্ট্রিংগুলি রাখা ভাল অভ্যাস ।
( QMessageboxউপরোক্ত যে কোনও QWidgetপদ্ধতিতে কাজ করে)
সম্পাদনা করুন:
আপনি QMesssageBoxকোনও QWidgetপ্রসঙ্গে বাইরে ব্যবহার করতে পারেন , @ টবিস্পাইটের উত্তর দেখুন।
আপনি যদি কোনও 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_()