回答
你会使用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
枚举以获取可以使用的按钮列表;该函数返回被点击的按钮。您可以设置一个带有额外参数的默认按钮(如果不指定或指定QMessageBox::NoButton
,Qt“自动选择合适的默认值”)。
可以使用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
}
QT可以像Windows一样简单。等效代码是
if (QMessageBox::Yes == QMessageBox(QMessageBox::Information, "title", "Question", QMessageBox::Yes|QMessageBox::No).exec())
{
}
我错过了翻译电话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
;
}
如果你的需求比静态方法提供的更复杂,你应该构造一个新的对象,并调用它的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'类外使用 – DomTomCat
- 1. Django的表单框架是否使用Django消息框架?
- 2. 检查窗口是否是消息框
- 3. 使用消息框
- 4. 在消息框中是/否功能
- 5. 消息框使用DTF
- 6. 是/否/是全部/否全部消息框asp.net
- 7. 使用'RegisterWindowMessage'注册的消息是否可以取消注册?
- 8. WPF消息框与WinForms的消息框
- 9. Mvvm灯对话框消息框。如何添加是,否,而不是取消?
- 10. 是否可以将QString传递给QMessageBox?
- 11. 使用Django消息框架显示特定的消息
- 12. 检查文本框是否为空,然后发布消息框
- 13. 是否有Control.Invoke泵消息?
- 14. 是/否确认消息
- 15. git消息是否标准?
- 16. 如何在Javascript中向用户显示是/否消息框?
- 17. 当消息可用时,JMS receiveNoWait()是否保证消息传递?
- 18. C#中使用一个消息框(是/否)重新开始我的比赛
- 19. 创建使用html的vba消息框
- 20. 分机Js运行一个功能是是否消息框
- 21. 是否有使用twitter bootstrap的用户消息模板?
- 22. 使用WebSockets发送大量消息与大消息是否有很多开销?
- 23. Excel宏是否没有消息框,对于是和否的不同方向
- 24. C#中有“是”,“否”选项的消息框?
- 25. 是否可以阻止来自现有DLL的消息框?
- 26. CQRS项目是否需要类似NServiceBus的消息框架?
- 27. 检测是否有任何打开的确认消息框
- 28. 是/否其他文化的WPF确认消息框
- 29. 是否有理由使用常量而不是消息?
- 30. 如何使用sendible api在消息框中创建消息?
我有一个关于动态生成消息框的方式的问题:是这样做还是预定义整个事情(创建并将消息框存储在变量等中),然后在需要时调用它? – rbaleksandar
@rbaleksandar最好使用QMessageBox静态方法。 Qt将清理方法返回时使用的所有内存,不需要将其永久保存在内存中。 – JoshL
谢谢,这很有道理。毕竟,这部分用户界面不是1)需要大量资源,因此需要一些时间来加载,并且2)经常甚至不断地在用户看到它的屏幕上。 – rbaleksandar