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

相关推荐
热爱编程的小刘2 小时前
Lesson04---类与对象(下篇)
开发语言·c++·算法
mengzhi啊2 小时前
qt加载了.qm却没有反应。因为加载时间太晚了
qt
郝学胜-神的一滴2 小时前
Linux网络编程之listen函数:深入解析与应用实践
linux·服务器·开发语言·网络·c++·程序人生
呱呱巨基3 小时前
c语言 文件操作
c语言·开发语言·c++·笔记·学习
小明同学013 小时前
[C++进阶] 深度解析AVLTree
c++·算法·visualstudio
CoderCodingNo3 小时前
【GESP】C++五级练习题 luogu-P1031 [NOIP 2002 提高组] 均分纸牌
开发语言·c++·算法
云小逸4 小时前
【Nmap 设备类型识别技术】整体概况
服务器·c语言·网络·c++·nmap
liu****4 小时前
29.路径类dp
c++·算法·acm
阿猿收手吧!4 小时前
【C++】C++模板特化:精准定制泛型逻辑
开发语言·c++·算法