Qt的窗口(三)

Qt的窗口(三)

1.模态对话框

在我们之前讲的对话框中,当弹出对话框时,我们也可以操作我们的父窗口,但是有的时候在一些特殊的场合中,必须要让用户作出决策。
model模态:弹出对话框的时候,此时用户无法操作父窗口,必须完成对话框内部要求的操作
非模态:弹出对话框的时候,用户可以操作父窗口

因此像我们前面写的几个代码都是非模态对话框,想要实现这种效果,只需要将我们在代码中运行对话框的show换成exec即可

2.MessageBox

之前讲了QDialog,接下来就可以讲讲它的一些扩展类,都是QDialog的子类,Qt已经给我们提供好了,Message是一个消息框,弹出信息让你做出选择

我们一点一点来解释代码

首先是创建方式,这个其实和QDialog是一样的,并且它同样也是继承QWidget的,因此也可以使用QWidget相关的属性和函数来设置标题等,setText是QMessageBox自带的,用来设置消息的

其次QMessageBox也可以设置图标和按钮,Qt也都给我们内置了

NoIcon:不显示任何图标

Information:信息图标(通常为蓝色 "i" 图标),用于展示一般性通知

Warning:警告图标(通常为黄色感叹号),用于提示潜在问题

Critical:严重错误图标(通常为红色叉号),用于报告严重故障

Question:疑问图标(通常为问号),用于引导用户确认操作

在我们的标准按钮中,我们是没有办法进行信号槽的链接的,因为按钮是QMessage自己生成的。QMessageBox使用场景更多是模态的,使用这种方法后设置后好按钮,并且使用exec,弹出模态消息框,当消息框处于弹出状态时,代码就会在exec这里阻塞,一直到消息框被关闭。当用户点击按钮后使对话框关闭,此时就能通过exec的返回值来知道我们用户点击的是哪个按钮,从而像信息槽一样执行一些对应逻辑了。

当然我们也可以使用自定义的按钮,如下,但是不常用,也不方便

其中的addButton的第二个参数,其实是设置我们的按钮所代表的属性,AcceptRole就代表接受,Ok

当只是简单的使用消息框的话,还有更简单的方式,调用QMessageBox给我们提供的静态函数

cpp 复制代码
QMessageBox::StandardButton QMessageBox::information(
    QWidget *parent,                // 父窗口指针
    const QString &title,           // 消息框标题
    const QString &text,            // 消息框内容
    QMessageBox::StandardButtons buttons = QMessageBox::Ok,  // 显示的按钮(默认仅显示OK)
    QMessageBox::StandardButton defaultButton = QMessageBox::NoButton  // 默认聚焦的按钮
);

上面只展示了information一种消息类型,其他的类型就是我们前面所讲的QMessageBox给我们提供的图标他们所代表的枚举值

2.ColorDialog

接下来这个是颜色对话框,就是让用户选择用户,使用起来也比较简单,和我们前面的QMessageBox一样,调用一个静态函数就可以实现

Qt中的QColorDialog的功能已经内置了调色板,像我们看见的打印结果其实是用0-1这样的小数表示RGB的值了,1对应到的整数就是255,0对应到整数0

我们使用的是getColor这个函数,这个函数能够弹出一个模块颜色框(这章节讲的,只要是静态函数,都是模块属性的),用户选择颜色之后,点击确定,对话框就会关闭,而函数返回值就是用户选择的颜色值。所以说和之前QMessageBox::information是一样的道理,不必创建对话框对象,就可以直接使用。

程序的功能是基于用户选择的颜色修改窗口的背景色,可以通过QSS来设置,在代码中演示了两种编写QSS的方式,这边只需要了解,后面章节会详细说明

3.QFileDialog

相关推荐
stolentime23 分钟前
CSP-J2026第一轮试题(附答案解析、markdown源码)
c++·csp
Rabitebla24 分钟前
【Linux系统编程】 指令(二):一条路径是怎么定位到文件的
linux·c++·笔记·学习·算法
程序员老陆1 小时前
std::experimental::when_any 深度解析:等待“第一个完成”的异步组合原语
c++·多线程
Rabitebla2 小时前
【Linux系统编程】指令(三):创建、删除、复制、移动、看内容
linux·数据结构·c++·算法
程序员老陆2 小时前
CMake 常用关键字与命令全景:从 set到 target_link_options的现代工程视角
c++·cmake·程序开发
实心儿儿3 小时前
Qt — 信号和槽
qt
码匠许师傅3 小时前
【C++三方组件】cxxopts:轻量首选的命令行解析
c++
hansang_IR3 小时前
【讲解】CSP-S2026 第一轮初赛
c++·算法
Methy3 小时前
IoTHub半个月崩了五次?都是裸rethrow惹的祸
服务器·c++·后端
我不会起名字3223 小时前
一天一道力扣Hot100(36):深度优先算法---组合总和
数据结构·c++·后端·python·算法·go