当前位置: 首页 > news >正文

qt文件操作与qss基础

文章目录

  • qt文件操作
    • 文件概述
    • 文件读写
    • 文件属性
  • 界面优化
    • qss基础
    • 选择器的用法
    • 结语

很高兴和大家见面,给生活加点impetus!!开启今天的编程之路!!
在这里插入图片描述
作者:٩( ‘ω’ )و260
我的专栏:qt,Linux,C++进阶,C++初阶,数据结构初阶,题海探骊,c语言
欢迎点赞,关注!!

qt文件操作

文件概述

我们在c语言中,使用fopen函数打开文件,fclose函数关闭文件,fread,fwrite来读写文件。
在c+++中,使用fstream来打开文件,close来关闭文件,>>,<<来读写文件。
在linux中,我们使用open打开文件,close来关闭文件,read,write来关闭文件。

虽然说有很多编程语言都有对应文件的操作,qt自己也实现了一套:
在这里插入图片描述
QTemporaryFile:主要用于创建临时文件的类,如果该对象销毁,对应文件也销毁了。
QSaveFile:当一个文件需要重新写入大量数据到旧文件的时候,会创建一个临时文件,当用户把数据写完之后,会删除旧文件,以相同名称创建新文件。不能直接替换,万一写错了,旧数据不在了,但是新数据页用不了。
QSerialPort:串口,一种古老的通信方式,嵌入式开发中比较常见。

我们对文件操作常见的属性有读,写,追加写
在这里插入图片描述
而且,从上面的继承关系来看,也可以写QFile::Append的。子类也会继承父类的属性。
我们再来通过qt看一下常见文件操作的函数:
在这里插入图片描述
后面的几种就不在介绍了,我们直接来看QFile。

文件读写

接下来我们实现一个程序,即使用保存文件在状态栏打印保存文件的地址,使用打开文件界面打印出文件的内容。直接来看代码:
mainWindow的构造函数:
在这里插入图片描述
我们通过font对象来修改显示框中的文字,同时,只要QAction选项被点击,就会发出一个triggered信号。

槽函数:
在这里插入图片描述
在这里插入图片描述
其中readALL函数返回的其实是字节数组,但是QString提供了使用字节数组来初始化QSting。同时,如果我们想使用QString来转换成字节数组,QString中封装了一个toutf8()。所以,字节数组和QString是可以相互转换的。

总结:文件操作的流程
打开文件->对文件进行操作(读,写,追加写)->关闭文件

来看结果:
在这里插入图片描述
该文件是先前再该项目中已经拟定好的文本文件了。

文件属性

可以通过代码来获取文件属性,文件属性在linux中谈的也比较多,这里直接给出示例代码:
在这里插入图片描述
还能其他更多属性,比如时间等等,这里不在赘述
来看结果:
在这里插入图片描述

界面优化

qss基础

现在看到的全部网页或者程序中,其实都是用了css来进行了界面优化。qss与css类似,但是功能上逊色于css。

在qt中,c++代码和qss代码都能够对控件样式进行修改,但是如果说两种代码修改同一个样式,qss代码的优先级更高。

那么该如何设置呢?
设置语法:
选择器 {
属性名: 属性值;
}

选择器:先选择某一个/类控件,其中进行的各种属性设置,都是针对选中控件生效,同时对其选中控件的子控件也会生效
我们进行的属性设置其实就是设置其中的键值对!!

我们直接来看代码示例:
此时我们直接通过setstylesheet函数来完成对控件字体的属性修改:
在这里插入图片描述
此时我们只是设置局部按钮的属性,那如果说需要设置全局的呢?
需要对main.cpp文件进行修改:
在这里插入图片描述
如果我们将QPushButton改为QWidget,也会发生同样的效果,因为属性对选择器的修改也包含选择器的子控件:
在这里插入图片描述

如果对全局的控件进行修改,需要修改main.cpp文件中的QApplication对象

如果我们既设置了全局样式,又设计了局部样式,此时样式相同会发生什么呢?样式不同又会发生什么呢?

局部和全局同时设置,如果是相同的样式,即此时冲突了,局部优先级更高,如果此时冲突,那么两种效果就会叠加

来看示例:
在这里插入图片描述
我们来看结果:
在这里插入图片描述
属性冲突,局部优先级更高。如果属性不冲突,会叠加。
我们修改局部button字体大小属性:
在这里插入图片描述
结果:
在这里插入图片描述
此时就是叠加的效果了。

我们可以通过全局样式可以设置一种全部控件的基础样式,对于不满足要求的控件再来进行局部样式修改

那么上面的代码有没有什么弊端呢?
我们能够发现其中c++代码和qt代码是相互耦合的,耦合度高肯定不是一件好事,我们该如何改正呢?

可以使用qrc机制,创建一个文件,随后我们打开该文件,通过qrc管理的文件内容来修改qss,这样就能够解耦合。

在这里插入图片描述
这种方式虽然可以,但是相较于第二种方法还是麻烦太多了。
第二种方法我们可以直接通过ui文件来设置,通过ui文件设置,我们还能够预览效果:
步骤:ui文件中右键找到改变样式表,在集中写入qqss代码即可。
在这里插入图片描述
通过改变样式表的方法,我们还可以对qss代码进行检验,正确则会显示有效样式表,反之无效样式表。

设置qss代码十分灵活,如果设置qss代码发现样式没有修改,排查思路:

1:全局样式
2:指定控件样式
3:指定控件的父控件样式
4:qss中文件样式(qrc管理)
5:ui文件样式

所以以后使用qss修改控件样式,最好都只写一种,不然后面改起来麻烦!

选择器的用法

在这里插入图片描述
常见的使用的就是上面的三种选择器,而且在前面类型选择器已经讲解了,我们来看剩下的示例代码:
在这里插入图片描述
再来看并集选择器,我们个图形化界面多添加几个控件:
在这里插入图片描述
来看结果:
在这里插入图片描述

结语

今天的内容就分享到这里了,不足之处欢迎留言之指出,感谢大家支持!
在这里插入图片描述

http://www.xdnf.cn/news/1265329.html

相关文章:

  • 推荐系统学习笔记(十一)预估分数融合
  • java web项目入门了解
  • Go语言接口实战指南
  • 聊聊经常用的微服务
  • Baumer高防护相机如何通过YoloV8深度学习模型实现火星陨石坑的检测识别(C#代码UI界面版)
  • 集成电路学习:什么是RQT图形用户界面工具
  • 智慧园区误报率↓76%:陌讯多模态融合算法实战解析
  • 智能情趣设备、爆 bug:可被远程操控。。。
  • 计算机网络:如何将/22的CIDR地址块划分为4个子网
  • 前端视角下关于 WebSocket 的简单理解
  • rosrun 和 roslaunch 区别
  • [激光原理与应用-205]:光学器件 - LD与DFB的比较
  • JavaWeb03——javascript基础语法
  • 微信小程序功能 表单密码强度验证
  • 从浅拷贝到深拷贝:C++赋值运算符重载的核心技术
  • v-model双向绑定指令
  • Selenium + Python + Pytest + Yaml + POM
  • Linux网络--2、Socket编程
  • 自由学习记录(79)
  • Pytest项目_day08(setup、teardown前置后置操作)
  • NY128NY133美光固态闪存NY139NY143
  • No time to train! Training-Free Reference-Based Instance Segmentation之论文阅读
  • 笔试——Day32
  • 【ros-humble】2.自定义通讯接口发布者python,qt使用(话题)
  • 使用 ast-grep 精准匹配指定类的方法调用(以 Java 为例)
  • V4L2摄像头采集 + WiFi实时传输实战全流程
  • 汇编语言和高级语言的差异
  • 【从0到1制作一块STM32开发板】6. PCB布线--信号部分
  • 【ESP32-menuconfig(1) -- Build Type及Bootloader config】
  • FreeRTOS入门知识(初识RTOS)(一)