💪 图像算法工程师,专业从事且热爱图像处理,图像处理专栏更新如下👇:
📝《图像去噪》
📝《超分辨率重建》
📝《语义分割》
📝《风格迁移》
📝《目标检测》
📝《图像增强》
📝《模型优化》
📝《模型实战部署》
📝《图像配准融合》
📝《数据集》
📝《高效助手》
📝《C++》
📝《Qt》
一、模态和非模态对话框
在 Qt 中,模态对话框(Modal Dialog)和非模态对话框(Non-Modal Dialog)是两种常见的对话框类型。它们的主要区别在于用户与对话框交互时,是否能够同时与其他窗口进行交互。
1.1 模态对话框
模态对话框会阻塞用户与父窗口的交互,直到用户关闭对话框或执行某些操作(例如点击“确定”或“取消”按钮)。在模态对话框弹出时,用户无法与其他窗口进行交互。模态对话框通常用于需要用户确认或选择某些信息的情况。
使用模态对话框,在 Qt 中,你可以通过 QDialog 类创建模态对话框,使用 exec() 函数来使对话框变为模态。
1.1.1 菜单栏和工具栏创建
先在设计中添加菜单栏和工具栏,并添加菜单项,见下:
1.1.2 模态对话框代码
在mainwindow.cpp源码文件中添加模态对话框代码,见下:
代码中参数解析:
exec():会启动事件循环,直到对话框关闭。
1.1.3 模态对话框效果
模态对话框效果见下:
1.2 非模态对话框
非模态对话框不会阻塞用户与父窗口的交互,用户可以同时与父窗口和对话框进行交互。这种对话框通常用于辅助信息展示、设置面板等场景。
使用非模态对话框
非模态对话框的创建方式与模态对话框相似,但它使用 show() 方法来显示对话框,而不是 exec()。
1.2.1 非模态对话框代码
在mainwindow.cpp源码文件添加非模态对话框代码见下:
1.2.2 非模态对话框效果
非模态对话框效果见下:
二、消息对话框
在 Qt 中,消息对话框(Message Box)用于向用户显示信息、警告、错误消息等,并接收用户的反馈(例如点击按钮)。Qt 提供了 QMessageBox 类,方便地实现不同类型的消息对话框。
QMessageBox 类
QMessageBox 是一个非常常用的对话框类,支持不同的类型、按钮和自定义内容。你可以通过它来显示 信息、警告、错误、确认 等类型的消息。
2.1 基本使用
QMessageBox 提供了一些静态方法来方便地显示常见类型的消息框,如信息框、警告框、错误框、确认框等。
示例:显示信息对话框
#include <QMessageBox>
#include <QPushButton>
void showMessage() {
QMessageBox::information(nullptr, "Information", "This is an information message.");
}
参数解析:
QMessageBox::information() 用于显示信息对话框。
参数分别是:父窗口、标题、信息文本。
2.2 信息对话框 (information())
用于显示信息消息框。
2.2.1 代码
示例代码见下:
QMessageBox::information(parent, "Information", "This is an information message.");
2.2.2 效果展示
运行代码显示界面见下:
2.3 警告对话框 (warning())
用于显示警告消息框。
2.3.1 代码
示例代码见下:
QMessageBox::warning(this,"warning","警告");
2.3.2 效果展示
运行代码显示界面见下:
2.4 错误对话框 (critical())
用于显示错误消息框。
2.4.1 代码
示例代码见下:
QMessageBox::critical(this,"critical","错误");
2.4.2 效果展示
运行代码显示界面见下:
2.5 确认对话框 (question())
用于显示确认对话框,通常用于询问用户是否执行某个操作(例如确认保存文件)。
2.5.1 代码
示例代码见下:
// 参数1:父亲 参数2:标题 参数3:提示内容 参数4:按键类型 参数5:默认关联回车按键
// QMessageBox::question(this,"ques","提问");
// QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel); // 默认在save按钮上
// QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel); // 默认在cancel按钮上
if (QMessageBox::Save == QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel))
{
qDebug() << "选择的时保存";
}
else
{
qDebug() << "选择的是取消";
}
2.5.2 效果展示
运行代码显示界面见下:
三、颜色对话框
3.1 颜色对话框 (QColorDialog)
QColorDialog 是用于选择颜色的对话框。用户可以通过此对话框选择颜色或使用调色板创建新的颜色。
3.2 代码
颜色对话框实例代码见下:
//颜色对话框
QColor color = QColorDialog::getColor(QColor(255,0,0)); // 返回值就是颜色信息
qDebug() << "r = " << color.red() << "g = " << color.green() << "b = " << color.blue();
参数解析:
QColorDialog::getColor() 打开颜色选择对话框。第一个参数是默认的颜色,第二个是父窗口(通常使用 this)。
color.isValid() 用于判断用户是否选择了有效的颜色。
可以通过 color.name() 获取颜色的十六进制表示。
3.3 效果展示
颜色对话框效果见下:
四、文件对话框
4.1 文件对话框 (QFileDialog)
QFileDialog 是一个用于选择文件的对话框。你可以用它来打开文件或保存文件。
4.2 代码
文本对话框的示例代码见下:
// 参数1:父亲 参数2:标题 参数3:默认打开路径 参数4:过滤文件格式
// QFileDialog::getOpenFileName(this,"打开文件","E:\\code\\Qt\\Demo_6_QDilalog"); // 打开文件路径中的文件夹
// QFileDialog::getOpenFileName(this,"打开文件","E:\\code\\Qt\\Demo_6_QDilalog","(*.cpp)"); // 将路径中的其它文件过滤,仅显示.cpp文件和文件夹
QString str = QFileDialog::getOpenFileName(this,"打开文件","E:\\code\\Qt\\Demo_6_QDilalog","(*.cpp)"); // 返回值是选取的路径
qDebug() << str;
参数解析:
QFileDialog::getOpenFileName() 打开文件选择对话框,允许用户选择一个文件。
第一个参数是父窗口,第二个是对话框标题,第三个是初始路径(为空时表示默认路径),第四个是文件过滤器(如 *.txt 或 *.* 等)。
4.3 效果展示
运行上面代码,会打开电脑本地对应路径下的文件件,见下:
五、字体对话框
5.1 字体对话框(QFontDialog)
QFontDialog 是一个用于选择字体的对话框。用户可以选择字体、大小、样式等。
5.2 代码
字体对话框示例代码见下:
//字体对话框
bool flag;
// QFontDialog::getFont(&flag,QFont("华为彩云",36));
QFont font = QFontDialog::getFont(&flag,QFont("华为彩云",36));
// qDebug() << "字体:" << font.family() << "字号:"<< font.pointSize() << "是否加粗:" << font.bold() << "是否倾斜:"<< font.italic();
qDebug() << "字体:" << font.family().toUtf8().data() << "字号:"<< font.pointSize() << "是否加粗:" << font.bold() << "是否倾斜:"<< font.italic();
});
参数解析:
QFontDialog::getFont() 打开字体选择对话框,第一个参数是一个布尔值,表示用户是否点击了“OK”按钮。
5.3 效果展示
字体对话框效果见下:
六、代码获取
配套教程的源码包获取方式已在文章结尾提供,扫码到「视觉研坊」中回复关键字:Qt中对话框,会自动回复下载链接。
下载解压后的样子见下:
七、总结
以上就是Qt中对话框:模态和非模态对话框、消息对话框、颜色对话框、文件对话框和字体对话框的语法及用法,希望能帮你理解。
感谢您阅读到最后!😊总结不易,多多支持呀🌹 点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖
关注下面「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!