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的方式,这边只需要了解,后面章节会详细说明










