Qt的窗口(二)
🌟🌟hello,各位读者大大们你们好呀🌟🌟
🚀🚀系列专栏:【Qt的学习】
📝📝本篇内容:窗口状态栏;浮动窗口;QDialog;自定义对话框;纯代码的方式来自定义QDialog界面;图形化方式自定义QDialog界面
⬆⬆⬆⬆上一篇:Qt的窗口(一)
💖💖作者简介:轩情吖,请多多指教(>> •̀֊•́ ) ̖́-
1.窗口状态栏
接下来要说的是窗口的状态栏,主要是用来提示一些信息什么的,用法也比较简单。我们直接举代码的例子
状态栏和菜单栏一样,如果创建项目的时候,勾选了ui文件,就会存在
showMessage是一个显示临时消息的函数,第二个参数可以控制显示时长,如果不传递这个参数,就是一直显示。不过这个显示临时消息的优先级比较高,所以说后面设置其他内容时,最好别使用,否则会覆盖整条状态栏别的内容,接着往后看。
我们也可以将控件设置进状态栏中,并且还能设置拉伸系数,拉伸系数之前在布局管理器讲过。
这里我们又添加了进度条和按钮,但是我们按钮的添加可不一样,它是从右往左添加的
| 函数声明 | 函数说明 |
|---|---|
| void addPermanentWidget(QWidget *widget, int stretch = 0); | 从右往左添加控件 |
| void addWidget(QWidget *widget, int stretch = 0); | 从左往右添加控件 |
2.浮动窗口
浮动窗口其实就是一个小窗,类似于我们弹窗出来让你点确实或取消的窗口,在Qt中我们也可以使用
看上去可能比较复杂,一步步理解
首先我们得创建浮动窗口就比较好理解,而且ui文件并不会包含,因此需要自己创建
然后最主要的就是我们想要在QDockWidget中想要创建控件,就必须要一个额外的QWidget才行,我们将各种控件都创建在QWidget中,方法和在正常的窗口差不多,就是参数从this变成了qwidget,最后qwidget设置进dockwidget即可
最后我们的浮动窗口也可以像工具栏一样设置停靠位置
3.QDialog
QDialog是一个对话框,我们针对一个已有的项目,也可以创建一些类,继承自QDialog实现咱们自定义的对话框。同时我们Qt也提供了很多现成的对话框,比如内置的对话框有:QFileDialog(文件对话框)、QColorDialog(颜色对话框)、QFontDialog(字体对话框)、QInputDialog(输入对话框)、QMessageDialog(消息对话框)。如果在创建项目的时候直接选择父类是它的话,其实创建出来后的界面其实和QWidget差不多
主要的不同点就是问号,QMainWindow和QWidget是缩放窗口
当然它的结构也不一样了
但是在我们一般使用QDialog的时候往往不是直接在创建项目的时候继承自Dialog。而是在代码中,创建额外的类,让额外的类继承自QDialog。因为我们的主窗口一般不会作为一个对话框,主窗口可以一些其他的对话框。举一个简单的例子,通过一个按钮来创建一个新的对话框
我们按了两次按钮,所以说可以看到我们界面上有两个对话框。这也就是意味着每次按下按钮都会创建一个新的QDialog对象,并显示出来,这样就导致了会出现内存泄漏。你会疑惑说不是将QDialog对象已经挂到对象树上了吗?确实会在最后QMainWindow销毁的时候
一并销毁,但是假设你点了无数次按钮,点击了关闭按钮后,内存没有释放,这就会导致内存不足。所以说在我们点击关闭按钮后,内存就应该释放。
那我们直接使用delete吗?肯定不可以,这样只会使得对话框弹出来一瞬间又立马消失了,正确的做法应该是把delete和关闭的按钮的点击信号关联起来,用户点击×的时候,触发delete,但是Qt也提供了更简单的设置属性来完成上面的操作,即Qt::WA_DeleteOnClose
4.自定义对话框
我们想要创建自定义对话框,就需要继承自QDialog创建类
4.1.纯代码的方式来自定义QDialog界面
使用纯代码的方式来自定义对话框就需要首先创建一个类
可能会有bug,需要创建完后手动添加,之前讲过
创建完后就可以写代码了。思路是在dialog相关文件中设置相关的控件以及属性,和平时在窗口上设置是差不多的,然后在mainwindow中创建并设置Dialog
4.2.图形化方式自定义QDialog界面
既然是图形化方式,那就必须要有ui文件
其实剩下的就是在ui文件中拖拽控件,代码部分就和之前的是一样的,不过多解释,直接上代码
🌸🌸Qt的窗口(二)大概就讲到这里啦,博主后续会继续更新更多Qt的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!如有小伙伴需要Qt的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪

























