Jawaban:
Anda akan menggunakannya QMessageBox::questionuntuk itu.
Contoh di slot widget hipotetis:
#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";
}
}
Harus bekerja pada Qt 4 dan 5, membutuhkan QT += widgetsQt 5, dan CONFIG += consolepada Win32 untuk melihat qDebug()output.
Lihat StandardButtonenum untuk mendapatkan daftar tombol yang dapat Anda gunakan; fungsi mengembalikan tombol yang diklik. Anda dapat menyetel tombol default dengan argumen tambahan (Qt " memilih default yang sesuai secara otomatis " jika Anda tidak atau menentukannya QMessageBox::NoButton).
Anda dapat menggunakan objek QMessage untuk membuat Kotak Pesan lalu menambahkan tombol:
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
}
Saya melewatkan panggilan terjemahan trdalam jawaban.
Salah satu solusi paling sederhana, yang memungkinkan internasionalisasi nanti:
if (QMessageBox::Yes == QMessageBox::question(this,
tr("title"),
tr("Message/Question")))
{
// do stuff
}
Biasanya merupakan Qtkebiasaan yang baik untuk menempatkan String tingkat kode dalam tr("Your String")panggilan.
( QMessageboxseperti di atas bekerja dalam QWidgetmetode apa pun )
EDIT:
Anda dapat menggunakan di QMesssageBoxluar QWidgetkonteks, lihat jawaban @ TobySpeight.
Jika Anda bahkan berada di luar QObjectkonteks, ganti trdengan qApp->translate("context", "String")- Anda harus melakukannya#include <QApplication>
QMessageBox menyertakan metode statis untuk mengajukan pertanyaan seperti itu dengan cepat:
#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
;
}
Jika kebutuhan Anda lebih kompleks daripada yang disediakan oleh metode statis, Anda harus membuat QMessageBoxobjek baru , dan memanggil exec()metode tersebut untuk menampilkannya dalam loop kejadiannya sendiri dan mendapatkan pengenal tombol yang ditekan. Misalnya, kami mungkin ingin menjadikan "Tidak" sebagai jawaban default:
#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
;
}
QApplicationsaya sarankan menggunakan qApp->translate("context", "String"), yang menggantikan trpenggunaan di luar QObjectkelas
Jika Anda ingin membuatnya dengan python, Anda perlu memeriksa kode ini di meja kerja Anda. juga menulis seperti ini. kami membuat kotak popup dengan python.
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_()