- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Qt QMessageBox类使用教程由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
QMessageBox 是 Qt 框架中常用的一个类,可以生成各式各样、各种用途的消息对话框,如图 1 所示.
图 1 QMessageBox消息对话框 。
很多 GUI 程序都会用到消息对话框,且很多场景中使用的消息对话框是类似的,唯一的区别只是提示信息不同。为了提高程序员的开发效率,避免重复地“造轮子”,Qt 开发者设计好了几种通用的 QMessageBox 消息对话框,需要时可以直接使用.
。
Qt 提供了 6 种通用的 QMessageBox 消息对话框,通过调用 QMessageBox 类中的 6 个静态成员方法,可以直接在项目中使用它们.
information 对话框常用于给用户提示一些关键的信息,它的外观如下图所示:
图 2 information 消息对话框 。
在项目中使用 information 消息对话框,直接调用 QMessageBox 类中的 information() 静态成员方法即可,该方法的语法格式如下:
StandardButton QMessageBox::information(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
各个参数的含义是:
information() 函数会返回用户按下的按钮。StandardButton 是 QMessageBox 类中定义的枚举类型,每个枚举值代表一种按钮。StandardButton 类型中的值有很多,下表给大家罗列了几个常用的:
表 1 QMessageBox::StandardButton 枚举类型值 。
枚举值 | 含 义 |
---|---|
QMessageBox::Ok | 标有 "OK" 字样的按钮,通常用来表示用户接受或同意提示框中显示的信息。 |
QMessageBox::Open | 标有 "Open" 字样的按钮。 |
QMessageBox::Save | 标有 "Save" 字样的按钮。 |
QMessageBox::Cancel | 标有 "Cancel" 字样的按钮。点击此按钮,通常表示用户拒绝接受提示框中显示的信息。 |
QMessageBox::Close | 标有 "Close" 字样的按钮。 |
QMessageBox::Discard | 标有 "Discard" 或者 "Don't Save" 字样的按钮,取决于运行平台。 |
QMessageBox::Apply | 标有 "Apply" 字样的按钮。 |
QMessageBox::Reset | 标有 "Reset" 字样的按钮。 |
QMessageBox::Yes | 标有 "Yes" 字样的按钮。 |
QMessageBox::No | 标有 "No" 字样的按钮。 |
例如,使用 information() 函数实现图 2 所示的对话框,实现代码为:
QMessageBox::StandardButton result = QMessageBox::information(&widget, "Title","text");
其中,widget 是我们创建好的 QWidget 窗口,创建好的 information 对话框会显示在 widget 窗口的前面。通过用 result 接收 information() 函数的返回值,我们可以得知用户选择的是哪个按钮.
critical 消息对话框常用于给用户提示“操作错误”或“运行失败”的信息,它的外观如下图所示:
图 3 critical 消息对话框 。
项目中使用 critical 消息对话框,直接调用 QMessageBox 类提供的 critical() 静态成员方法即可,该方法的语法格式为:
StandardButton QMessageBox::critical(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
各个参数的含义以及返回值的含义,都与 information() 函数相同,这里不再重复赘述.
例如,使用 critical() 函数实现图 3 所示的对话框,实现代码为:
QMessageBox::StandardButton result=QMessageBox::critical(&widget, "Title","text");
其中,widget 是我们创建好的 QWidget 窗口,创建好的 critical 对话框会显示在 widget 窗口的前面.
question 对话框常用于向用户提出问题并接收用户的答案,它的外观如下图所示:
图 4 question消息对话框 。
项目中使用 question 对话框,可以直接调用 QMessageBox 类的 question() 静态成员方法,该方法的语法格式为:
StandardButton QMessageBox::question(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = StandardButtons( Yes | No ), StandardButton defaultButton = NoButton)
各个参数的含义以及返回值的含义,都与 information() 函数相同.
例如,使用 question() 函数实现图 4 所示的对话框,实现代码为:
QMessageBox::StandardButton result=QMessageBox::question(&widget, "Title","text");
其中,widget 是我们创建好的 QWidget 窗口,创建好的 question 对话框会显示在 widget 窗口的前面.
warining 对话框常用于向用户显示一些警告信息,它的外观如下图所示:
图 5 warning消息对话框 。
项目中使用 warning 对话框,可以直接调用 QMessageBox 类的 warning() 静态成员方法,该方法的语法格式为:
StandardButton QMessageBox::warning(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
各个参数的含义以及返回值的含义,都与 information() 函数相同.
例如,使用 warning() 函数实现图 5 所示的对话框,实现代码为:
QMessageBox::StandardButton result=QMessageBox::warning(&widget, "Title","text");
其中,widget 是我们创建好的 QWidget 窗口,创建好的 warning 对话框会显示在 widget 窗口的前面.
about 对话框常常作为介绍某个产品或某项功能的临时窗口,它的外观如下图所示:
图 6 about消息对话框 。
注意,about 对话框没有固定的图标,它显示的图标可能来自父窗口、包含父窗口的顶层窗口等,也可能使用和 information 对话框相同的图标.
项目中使用 about 对话框,直接调用 QMessageBox 类提供的 about() 静态成员方法即可,该方法的语法格式如下:
void QMessageBox::about(QWidget *parent, const QString &title, const QString &text)
各个参数的含义和与 information() 函数相同。和前面的几种对话框不同,about对话框中只包含一个默认的 Ok 按钮,且 about() 函数没有返回值.
aboutQt 可以看做是 about 对话框的一个具体实例,它只能显示 Qt 的介绍信息,如下图所示:
图 7 aboutQt对话框 。
项目中使用 aboutQt 对话框,直接调用 QMessageBox 类提供的 aboutQt() 静态成员方法即可,该函数的语法格式如下:
void QMessageBox::aboutQt(QWidget *parent, const QString &title = QString())
我们只能设置 aboutQt 对话框的 parent 父窗口和 title 标题,不能自定义它的内容。所以在实际场景中,aboutQt() 对话框很少使用.
。
以上 6 种通用的 QMessageBox 对话框,界面上的图片无法修改,按钮上的文字也无法修改(例如无法将 OK、No 改成中文)。如果想修改它们,就需要自定义一个 QMessageBox 对话框.
QMessageBox对话框的创建 。
程序中创建 QMessageBox 对象,必须先引入<QMessageBox>头文件。QMessageBox 类提供了两个构造函数,分别是:
QMessageBox::QMessageBox(QWidget *parent = Q_NULLPTR)QMessageBox::QMessageBox(Icon icon, const QString &title, const QString &text, StandardButtons buttons = NoButton, QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint)
第一个构造函数可以创建一个“空白”对话框,即对话框中不包含任何文本和按钮。当然,通过调用 QMessageBox 类提供的成员方法,可以向“空白”对话框中添加各种元素(图标、文本、按钮等).
第二个构造函数中,各个参数的含义是:
举个简单的例子:
#include <QApplication>#include <QMessageBox>int main(int argc, char *argv[]){ QApplication a(argc, argv); //创建 QMessageBox 类对象 QMessageBox MyBox(QMessageBox::Question,"Title","text",QMessageBox::Yes|QMessageBox::No); //使 MyBox 对话框显示 MyBox.exec(); return a.exec();}
程序中创建了一个 MyBox 对话框,通过调用 QMessageBox 提供的 exec() 方法,可以使 MyBox 对话框弹出。运行程序可以发现,MyBox 对话框的外观和图 4 的 question 对话框完全一样.
QMessageBox对话框的使用 。
QMessageBox 类提供了很多功能实用的成员方法,方便我们快速地制作出实际场景需要的对话框.
下表给大家罗列了常用的一些 QMessageBox 类成员方法:
表 2 QMessageBox 常用成员方法 。
成员方法 | 功 能 |
---|---|
void QMessageBox::setWindowTitle(const QString &title) | 设置对话框的标题。 |
void setText(const QString &text) | 设置对话框中要显示的文本。 |
void setIconPixmap(const QPixmap &pixmap) | 设置对话框中使用的图片。 |
QAbstractButton *QMessageBox::clickedButton() const | 返回用户点击的按钮。 |
QPushButton *QMessageBox::addButton(const QString &text, ButtonRole role) | 向对话框中添加按钮,text 为按钮的文本,role 是 QMessageBox::ButtonRole 枚举类型的变量,用于描述按钮扮演的角色,它的可选值有 QMessageBox::AcceptRole(同 OK 按钮)、QMessageBox::RejectRole(同 Cancel 按钮)等。 |
int QMessageBox::exec() | 使当前对话框弹出,除非用户关闭对话框,否则对话框将一直存在。此外,当对话框中使用的都是 Qt 提供的按钮时,该方法可以监听用户点击的是哪个按钮,并将该按钮对应的枚举值返回;如果对话框中包含自定义按钮,需要借助 clickedButton() 方法确定用户点击的按钮。 |
举个简单的例子:
#include <QApplication>#include <QMessageBox>#include <QPushButton>#include <QDebug>int main(int argc, char *argv[]){ QApplication a(argc, argv); QMessageBox MBox; MBox.setWindowTitle("QMessageBox自定义对话框"); MBox.setText("这是一个自定义的对话框"); MBox.setIconPixmap(QPixmap("C:\\Users\\xiexuewu\\Desktop\\icon_c.png")); QPushButton *agreeBut = MBox.addButton("同意", QMessageBox::AcceptRole); MBox.exec(); if (MBox.clickedButton() == (QAbstractButton*)agreeBut) { //在 Qt Creator 的输出窗口中输出指定字符串 qDebug() << "用户点击了同意按钮"; } return a.exec();}
程序运行结果如图 8 所示,点击“同意”按钮后,我们会在 Qt Creator 的输出窗口中看到“用户点击了同意按钮”.
图 8 自定义的 QMessageBox 对话框 。
QMessageBox的信号和槽 。
操作 QMessageBox 对话框,最常用的信号函数是 buttonClicked() 函数,最常用的槽函数是 exec() 函数,它们的语法格式和功能如下表所示。 。
表 3 QMessageBox信号和槽 。
信号函数 | 功 能 |
---|---|
void QMessageBox::buttonClicked(QAbstractButton *button) | 当用户点击对话框中的某个按钮时,会触发此信号函数,该函数会将用户点击的按钮作为参数传递给槽函数。 |
槽函数 | 功 能 |
int QMessageBox::exec() | 弹出对话框,直到用户手动关闭对话框,此对话框将一直存在。 |
举个简单的例子:
//main.cpp#include <QApplication>#include <QWidget>#include <QMessageBox>#include <QPushButton>#include <QAbstractButton>QPushButton* agreeBut;QPushButton* disagreeBut;class MyWidget:public QWidget{ Q_OBJECTpublic slots: void buttonClicked(QAbstractButton * butClicked);};void MyWidget::buttonClicked(QAbstractButton * butClicked){ if(butClicked == (QAbstractButton*)disagreeBut){ this->close(); }}int main(int argc, char *argv[]){ QApplication a(argc, argv); //创建主窗口 MyWidget myWidget; myWidget.setWindowTitle("主窗口"); myWidget.resize(400,300); //创建消息框 QMessageBox MyBox(QMessageBox::Question,"",""); MyBox.setParent(&myWidget); //设置消息框的属性为对话框,它会是一个独立的窗口 MyBox.setWindowFlags(Qt::Dialog); MyBox.setWindowTitle("协议"); MyBox.setText("使用本产品,请您严格遵守xxx规定!"); //自定义两个按钮 agreeBut = MyBox.addButton("同意", QMessageBox::AcceptRole); disagreeBut = MyBox.addButton("拒绝", QMessageBox::RejectRole); myWidget.show(); //添加信号和槽,监听用户点击的按钮,如果用户拒绝,则主窗口随之关闭。 QObject::connect(&MyBox,&QMessageBox::buttonClicked,&myWidget,&MyWidget::buttonClicked); MyBox.exec(); return a.exec();}//MyWidget类的定义应该放到 .h 文件中,本例中将其写到 main.cpp 中,程序最后需要添加 #include "当前源文件名.moc" 语句,否则无法通过编译。#include "main.moc"
程序执行结果为:
到此这篇关于Qt QMessageBox类使用教程的文章就介绍到这了,更多相关Qt QMessageBox内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:http://c.biancheng.net/view/9421.html 。
最后此篇关于Qt QMessageBox类使用教程的文章就讲到这里了,如果你想了解更多关于Qt QMessageBox类使用教程的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在使用 Qt 语言学家翻译一个 ui 文件。我使用 lupdate 获取了它的 ts 文件,并翻译了这些单词和短语。现在我想将它添加到我的代码中,但我从它的教程中发现我似乎必须将 tr() 添加到
我想在 Qt Creator 中创建下面的简单控制台应用程序: #include int main(int argc, char* argv[]) { std::cout #include
我想将 libQtGui.so.4 libQtNetwork.so.4 和 libQtCore.so.4 包含在与我的应用程序所在的目录相同的目录中。我如何让 Qt 理解这一点? y 目的是拥有一个使
我有一个充满 QPushButtons 和 QLabels 以及各种其他有趣的 QWidget 的窗口,所有这些都使用各种 QLayout 对象动态布局...而我想做的是偶尔制作一些这些小部件变得不可
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improve
我想知道 Qt 是否将下面代码的“版本 1”之类的东西放在堆上?在版本 1 中,Qt 会将 dirStuff 放在堆栈上还是堆上?我问是因为我有一种感觉,Java 将所有数据结构放在堆上......不
这个问题是关于 Qt Installer Framework 2.0 版的。 在这一点上,使用 Qt 安装程序框架的人都知道,如果不进行自定义,您根本无法通过安装程序覆盖现有安装。这样做显然是为了解决
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
因为我在我的计算机上安装了 Qt 4.8.4 和 Qt 5.1,所以我遇到了问题。 当只有 Qt 4.8.4 存在时,一切都很好。 当我添加 Qt 5.1 时,这个工作正常,但 Qt 4.8.4 给了
我无法在我的 Ubuntu 12 中安装更多软件包。我尝试了 apt-get install -f ,以及许多其他类似的技巧,但在找到解决方案方面没有进展。 这是属于 Qt 的损坏包: 以下包具有未满
我正在尝试使用 Virtual Box 中的 Ubuntu 机器复制我们目前在物理 Ubuntu 服务器上运行的应用程序。它是一个 QT 应用程序,但在服务器上我们使用 NPM 的 pm2 运行它。安
问题: Qt Creator 是用 Qt Creator 构建的吗? 同样,Qt Designer 是用 Qt Designer 构建的吗? 顺便说一句,为什么有两个 Qt IDE?他们是竞争对手吗?
当我使用 QWidget设计用户界面时,我总是对它的大小属性有点困惑。有size policy , geometry和 hintSize . 我只知道size policy之间的关系和 hintSiz
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我想知道是否有一种很好的方法可以让用户像 LabView 一样创建节点图(有限制)。 像这样的东西: 我见过http://www.pyqtgraph.org/ ,这似乎有类似的东西,我确实打算使用 P
在 Qt 中是否有一种跨平台的方式来获得用户喜欢的固定宽度和比例字体? 例如,在 cocoa 中,有 NSFont *proportional = [NSFont userFontOfSize:12.
我想使用 Qt 和 C++ 制作这样的交互式图表:http://jsxgraph.uni-bayreuth.de/wiki/index.php/Cubic_spline_interpolation 关
我正在编写一个嵌入式设备屏幕的模拟(其中包含主 QWidget 顶部的自定义小部件),虽然屏幕的原始尺寸是 800x600,但我希望能够按比例放大和缩小它拖动窗口的角。如果不使用网格布局和担架(不会向
在下面的示例中,我是否必须从堆中删除对象?如果是的话,怎么办? #include #include #include #include #include int main(int argc,
来自 Web 开发背景,我现在进入 QT 应用程序开发。 使用 QFonts 我已经看到我显然只有两个选择,在 QT 中定义字体大小;按像素大小或点大小。 在制作网页布局时,我习惯于以相对方式定义所有
我是一名优秀的程序员,十分优秀!