Answers:
您将为此使用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
在Qt 5和CONFIG += console
Win32上才能看到qDebug()
输出。
请参阅StandardButton
枚举以获取可以使用的按钮列表;该函数返回被单击的按钮。您可以设置带有附加参数的默认按钮(如果您未指定或指定,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
doc.qt.io/qt-4.8/qmessagebox.html#icon-prop
我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
如果要使用python制作,则需要在工作台中检查此代码。也这样写。我们使用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_()