- 博客(79)
- 收藏
- 关注
原创 15_国际化和本地化:tr()、ts 文件、QM 文件、多语言切换
继承QObject且带Q_OBJECT的类,可直接使用自己的tr();它的类名会成为 context。自由函数没有类 context 时,可显式调用return QObject::tr("默认配置");这会把 context 记为QObject。它适合真正跨类共享的少量通用文案;不要为了省事让整个项目都使用,否则 Linguist 中很难分辨“打开”属于哪个界面和业务含义。Qt 国际化的上手点很小:把界面固定文字写成tr("..."),用配置 TS 与 QM,然后在 Linguist 中完成翻译。
2026-09-01 18:07:48
380
原创 14_Qt 样式表(QSS)入门(语法、选择器、美化实战)
QSS 的上手入口很小:一条规则就能改变控件外观;真正可维护的入口则是“资源文件 + 应用级主题 + 稳定语义锚点”。先让 QSS 文件描述所有通用视觉,再用objectName描述唯一结构、用动态属性描述可复用角色、用伪状态描述交互反馈。从源码看,保存的不是一张立即画出的位图。Qt 将 QSS 解析为规则,通过包装基础 Style,并在控件查询度量、处理样式变化和后续绘制时应用这些规则。理解“设置、匹配、重绘”三步,就能解释绝大多数样式不生效、切换不刷新和复合控件错位的问题。
2026-08-31 03:30:00
364
原创 13_高级控件深度详解:QTableWidget、QTreeWidget、QListWidget与 Model/View
让初学者可以先通过 item 对象组织二维、层级和一维数据:创建条目,放入控件,用UserRole保存稳定 ID,再通过当前项、选择变化和内容变化信号连接业务逻辑。从源码角度看,便利控件没有绕开 Model/View:条目修改会进入内部模型,模型通过等信号通知视图,选择由维护,默认或自定义代理最终完成绘制和编辑。理解这条链路后,QTableViewQTreeViewQListView不再是另一套陌生 API,而是把便利控件内部已经在做的模型职责显式交给开发者。下一章将进入 Qt 样式表。
2026-08-30 10:23:00
752
原创 12_常用控件速查(下):QSpinBox、QSlider、QProgressBar、QCheckBox
当显示文本和整数规则不一致时,可以派生QSpinBox并重写转换函数。例如用x1x2protected:不要试图通过重写内部QLineEdit的按键事件来“拦截”数值。已经处理了校验、编辑解释、步进、撤销和输入法等细节;优先使用fixup()validate()等公开扩展点。小数输入应使用,不要用整数控件再手工除以 100。QSpinBox把整数限制在可信范围,QSlider让用户快速挑选范围值,QCheckBox表示布尔或聚合状态,将异步任务的结果可视化。
2026-08-29 14:31:57
525
原创 11_常用控件速查(上):QPushButton、QLabel、QLineEdit、QComboBox
QLabel展示说明和结果,QLineEdit收集单行输入,QComboBox提供稳定的候选值,发起命令或维护二元状态。使用时优先掌握四件事:用布局安放控件;用属性限制可见行为;用新式connect()连接信号槽;在提交边界把控件状态转换为业务数据。从源码视角看,控件 API 并非直接“画界面”或“调用函数”:按钮和输入框先处理事件、更新内部状态,再经 MOC 生成的信号函数与找到连接;标签把重绘请求交给事件循环;下拉框则借助模型和视图保存、展示条目。
2026-08-28 00:06:29
401
原创 10_Qt Designer 与 UI 文件(.ui 原理、uic 编译、动态加载)
Designer 的“提升为(Promoted to)”只是设计期信息;QUiLoader运行时仍需要能创建这个类。为自定义类提供工厂、插件或实现。Qt Designer 负责把界面画出来,.ui负责把界面描述成 XML,uic负责在构建期把 XML 转成ui_*.h,而QUiLoader则在运行期直接解析 XML 创建 QWidget。默认用编译期路径获得更早的错误检查;只有确实需要“替换界面而不重新编译”时,才选择动态加载。
2026-08-27 00:45:55
332
原创 09_Qt 布局管理系统——QHBoxLayout、QVBoxLayout、QGridLayout
布局管理器让界面描述“关系”而非“坐标”。解决一行内的左右关系,组织上下区块,保证多行多列对齐;它们可以嵌套,形成可维护的布局树。边缘留白用,相邻控件距离用spacing,可变空白用stretch;stretch 是权重,需要结合、建议尺寸和最小/最大尺寸一起理解。下一章将继续深入 Qt Widgets 的视觉体系重要一环:QtDesigner拖拽出来的UI控件,如何被编译加载成我们看到的实际渲染界面。下一篇预告:《Qt Designer 与 UI 文件(.ui 原理、uic 编译、动态加载)》
2026-08-26 00:05:59
344
原创 08_对话框系统全解析——模态非模态、QMessageBox、QFileDialog
tr("保存失败"),tr("文件无法写入。"),this);box->setInformativeText(tr("请检查磁盘空间或文件权限。"));});如果按钮文字不是标准语义,可以使用box->setWindowTitle(tr("文件已存在"));box->setText(tr("目标文件已经存在,如何处理?"));QPushButton *overwrite = box->addButton(tr("覆盖"), QMessageBox::AcceptRole);
2026-08-25 00:16:19
484
原创 07_QMainWindow 与应用程序框架——菜单栏、工具栏、状态栏
若窗口不需要停靠区,而是要严格控制每一行位置,可以使用普通QWidget作为顶层窗口,并用布局显式放置QMenuBarQToolBar、内容区和QStatusBarpublic:// 在main函数直接调用cw.show();这段代码能搭出视觉结构,但需要自己承担更多职责:工具栏是否允许移动、用户布局怎样保存、停靠面板如何实现、窗口状态如何恢复。它适用于刻意简化或完全自定义的壳,不是为了“看起来更底层”而替换。
2026-08-24 14:56:37
450
原创 06_Qt 常用数据类型与容器:QString、QList、QVector、QMap 的性能与实现分析
QString是 Qt 的 Unicode 文本类型,内部以 UTF-16 代码单元存储;它适合 Qt UI、路径和业务文本,但不应代替二进制字节缓冲区。Qt 6 的QList<T>是连续的顺序容器,与在基本复杂度上相近;预知规模时先reserve()。Qt 6 中QVector<T>是QList<T>的别名,选型不再需要基于二者性能或内存布局。QMap<K,V>是带隐式共享值语义的有序std::map包装;它适合排序和范围查询,非constoperator[]会在缺键时插入值。QString。
2026-08-23 14:50:24
649
原创 05_Qt 核心模块概览——Qt Core、Gui、Widgets、Quick 的职责划分
需求:生成缩略图、绘制报表图片、操作像素、访问屏幕信息。选择:至少需要Qt Gui,可以使用QImageQPainter等类;是否再加 Widgets 或 Quick,取决于是否还需要相应的 UI。Qt Core提供事件循环、对象模型、容器、文件、线程等非图形基础能力;Qt Gui提供窗口系统、屏幕、输入、图像、字体和绘制等图形基础设施;Qt Widgets在 Gui 之上提供传统桌面控件与布局体系;Qt Quick借助 QML 提供声明式、动态化的现代 UI 框架;
2026-08-22 15:31:24
446
原创 04_Qt项目构建流程深度解析——MOC、UIC、RCC 的作用与原理
类的名称父类信息信号和槽可调用的方法属性信息这种能力并不是标准 C++ 原生提供的。因为setValue()是编译期就确定的成员函数。"setValue"这样的字符串在运行时查找对应的方法,标准 C++ 并没有提供这样的机制。Qt 则通过Meta-Object System(元对象系统)解决了这个问题。运行时类型信息信号槽机制动态方法调用属性系统对象的元信息查询都属于 Qt 元对象系统的一部分。工具输入输出解决的问题MOC含Q_OBJECT的头文件。
2026-08-21 00:18:50
387
原创 03_第一个Qt项目:Hello World 的完整拆解
通俗地说,事件循环是一个无限循环,它不断地从“事件队列”中取出事件,并将其分发给对应的对象进行处理。它的伪代码逻辑大致如下,以下代码只是帮助理解事件循环的伪代码,并不是 Qtexec()的实际源码。创建 QApplication↓创建 MainWindow↓显示窗口↓进入事件循环↓用户持续操作↓事件循环退出↓MainWindow 析构↓QApplication 析构↓程序结束这就是一个最简单 Qt GUI 程序从启动、运行到退出。
2026-08-20 00:02:04
516
原创 02_Qt 开发环境搭建
一个 Kit 可以理解为 Qt Creator 用于构建和运行项目的一套工具链配置。Qt 版本;编译器;调试器;构建工具;目标设备/平台;以及相关的 CMake 配置。简单理解:Kit 就是一套“Qt + 编译器 + 调试器 + 构建环境”的组合。使用哪个编译器(使用哪个 Qt 版本(Qt 5.15.2 / Qt 6.8.0);使用哪个调试器(目标平台是什么(Windows / Linux / Android / 嵌入式)。可以把 Kit 理解为“生产流水线的配置单”
2026-08-19 04:00:00
370
原创 01_为什么 2026 年还要学 Qt ?
C++26 标准将首次引入编译期反射(compile-time reflection),核心提案是。这意味着编译器本身将具备“审视”代码结构的能力——可以遍历类的成员、函数参数、枚举值等信息,而这些工作过去只能由外部工具完成。回到开篇的问题:为什么 2026 年还要学 Qt?
2026-08-18 00:02:45
301
原创 Qt5学习 模仿qq音乐播放器样式(2)——点击动画效果+歌词颜色变换展示
拖的太久,主要再上一篇文章中,新学习了相关知识,做了右键菜单,点击按钮动画切换窗口和播放时歌词颜色显示当前播放位置。主要为了实现功能的展示,所以很多文件读取都直接采用了本地文件这种比较low的方式。对软件来说使用会很差,不过毕竟以实现为主,所以不再此考虑太多花里胡哨了。点击动画效果先上图对比下与qq音乐的样式猛的一看好像就是点击按钮出现了一个新的窗口。其实这个动画效果唯一的特点就是,这个窗口是慢慢从底部滑动到顶部,滑动的时间是可以自己设置的。动画效果设计思路1、在主窗口内底部添加一个子窗口,
2021-04-06 22:07:17
1916
1
原创 Qt5学习 模仿qq音乐播放器样式(1)
尝试用 Qt做一些小例子才能更好的学习与使用。看了下网上对于qq音乐的样式没有相关文章,所以慢慢模仿做一个。对于桌面应用,Qt当前更多用于工程项目的控制窗口设计。掌握基本信号与槽,函数使用和简单样式设计即可。其他就是工作业务流程,根据相关工作有不同的用法。当然我们熟知的WPS可是用Qt实现的。说在前面,关于Qt本人是无比无奈,在Qt5的功能下,很多功能的实现比之前版本相对容易了许多,但是功能的增加必定带来许多坑。而且一个控件所使用的相关函数,信号与槽有些关于介绍或者参数是相当模糊的,需要有一个试错过程。
2021-01-04 22:59:28
2330
2
原创 Qt之seturl和load
很久没有写博客了,成为了一名社畜。因为工作需要,所以要对Qt进行学习,有机会就对Qt相关的知识点进行记录学习。网上的资料还是比较杂,官网的文档多为说明,但是实例较少,许多函数之间的用法也比较接近。记录也是为了让自己加深印象。QWebEngineView如果你想将web页面嵌入到Qt的窗口页面展示,一般使用QWebEngine相关类。QWebEngine是基于谷歌浏览器内核引擎。对于加载和显示网页非常的简单与便捷。在官方文档查阅资料过程中,有两个函数seturl和load可以将网页的url调用,这
2020-09-20 18:35:48
3087
2
原创 C++-多态
多态多态的概念通俗的来讲,就是多种形态。具体点就是去完成某个行为,当不同的对象去完成时会产生不同的状态。比如:买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时是优先买票。多态的定义及实现多态的构成条件多态是在不同继承关系的类对象,去调用同一个函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。...
2019-07-29 15:49:36
373
原创 网络基础知识-传输层
传输层负责端与端之间的数据传输。也就是说进程与进程之间的数据传输,进程用端口来表示,所以也可以叫做端口和端口之间的传输。端口号端口号为065535,一般01023为知名端口,不推荐使用,在一台主机上表示一个进程。操作系统拿到网卡接收的数据之后,通过数据中的端口号知道数据放到哪一个socket缓冲区中五元组一条数据中包含的五个信息。源IP+源端口+目的IP+目的端口+协议主机上网络状态...
2019-07-06 16:53:48
625
原创 C++-继承
C++继承继承的概念及定义继承的概念继承机制是面向对象程序设计使代码可以复用的常用手段,它允许程序员保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用是函数复用,继承是类设计层次的复用。最普通的继承例子class Person{public: void Print() {...
2019-07-03 10:33:21
265
原创 网络基础知识-应用层
在了解网络整体模型之前学习了套接字编程和一些简单的网络知识。但是网络编程的理论基础是建立在多方面上的,比如数据在每一层是经过了怎么样的封装,每一层使用了哪些协议,每一层的协议又有哪些用途。只有掌握好这些基础知识,才能更好的成为一个服务器开发人员。应用层程序员写的一个个解决我们实际问题,满足我们日常需求的网络程序,都是在应用层完成的。那么应用层使用了哪些协议呢?自定制协议socket编程中...
2019-06-18 16:10:51
570
原创 C++-内存管理
参考博客:https://blog.youkuaiyun.com/jing0611/article/details/4030237在最开始的学习中,老师一直在说一个关于C++的话题。**C++是一个极度追求性能的语言。**通过学习,这不是开玩笑,在我所学习的语言中,对内存的使用有如此的执着的“较真”也就是C++了。因为性能的缘故,一个内存不合理的分配,都可能在日后成为一个隐患,成为一个令人头疼的BUG。所...
2019-06-18 11:05:24
10640
原创 TCP的三次握手与四次挥手(生动详细图片解释可保存)
TCP的三次握手与四次挥手关于题目的这个问题,在网络中有着非常重要的地位。因为客户端与服务端之间通过TCP协议,为了进行数据的传输会进行一系列的操作,这中间的操作就是TCP的三次握手与四次挥手。重新回顾TCP协议TCP协议称为数据传输协议,是可靠传输,面向连接的,并且面向字节流的。面向连接:通信之前先建立连接,确保双方在线。可靠传输:在网络正常的情况下,数据不会丢失。面向字节流:传输灵...
2019-06-13 21:41:39
417
原创 Linux网络套接字编程(2)-TCP传输+多线程+多进程
TCP传输TCP的三次握手图解为TCP协议的传输过程。客户端操作服务端操作1、创建套接字1、创建套接字2、向服务端发起连接2、绑定地址信息3、发送数据3、监听(若有新的客户端,新建socket)4、接收数据4、接收已经连接成功的socket5、关闭套接字TCP传输-socket编程通过C++实现一个类来封装tcp协议//tcp...
2019-06-11 18:00:38
860
原创 Linux网络编程套接字-UDP传输
网络编程套接字udp传输客户端1、创建套接字 socket()2、为套接字绑定地址 bind()3、发送数据(如果socket还没有绑定地址,这时候操作系统会选择一个合适的地址端口进行绑定)4、接收数据5、关闭套接字服务端1、创建套接字,通过创建套接字使进程与网卡建立联系,创建struct socket{…}2、为套接字绑定地址信息3、接收数据4、发送数据5、关闭套接字...
2019-06-06 15:32:43
857
2
原创 Linux网络编程
网络编程了解网络名词IP地址:在网络中唯一标识的一台主机port端口:在一台主机上标识一个进程协议:通信双方的约定网络协议:网络通信环境中数据的约定格式通信协议标准:网络互联的前提协议分层在以往的了解知道协议具有多层,而分层就是为了协议分装,为了更好的使用。对服务,接口,协议进行明确的划分;形成标准实现起来就容易了OSI七层模型物理层,数据链路层,网络层,传输层,会话层,表示...
2019-06-04 18:07:14
356
原创 C++-模板初了解
模板初阶泛型编程在C语言的学习过程中,经常会出现这么一个场景,我们需要交换两个数,但是我们每次又在另一个场景中,所以需要立即重写一个swap()函数,这就浪费了大量的时间。在C++的最开始我们学习了函数的重载,这解决了一些燃眉之急,但是当我们的类型多了,我们还是要不停的修改或者添加这么一类函数,时间还是被浪费了许多。这时候,新的知识就出来帮我们解决问题来了—-泛型编程泛型编程:编写与类型无...
2019-06-04 14:42:59
213
原创 C++-类与对象(3)
类与对象(3)再学构造函数构造函数体赋值先构造一个带有全缺省的日期类class Date{ public: Date(int year,int month,int day) { _year = year; _month = month; _day = day; } private: int _year...
2019-06-02 22:18:32
254
原创 Linux多线程(3)
线程安全的考虑关乎互斥锁和条件变量消费者与生产者模型当我们去超市买东西时,我们都认为我们是消费者,那些生产商品的都被认为是生产者。那么超市就被当作交易市场。这对比的我们的软件开发过程中:代码的某个模块负责生产数据,但是生产出来的数据不得不交给另一模块来对其进行处理,在这之间我们必须要有一个类似上述超市的东西来存储数据,这就抽象成了生产者与消费者模型其中,产生数据的模块,就形象地称为生产者。...
2019-05-31 15:23:35
583
原创 C++-类与对象(2)
类与对象(第二部分)类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类并不是什么都没有,任何类在我们不写的情况下,都会自动生成6个默认成员函数构造函数构造函数的概念构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的声明周期内只调用一次。构造函数的特性构造函数是特殊的成员函数,需要注意的是,...
2019-05-18 23:40:42
275
原创 Linux多线程(2)
线程的知识点太多,太重要,所以分成三部分进行总结学习线程安全多个线程并发同一段代码时,不会出现不同的结果。常见对全局变量或者静态变量进行操作,并且没有锁保护的情况下,会出现该问题。多个线程对临界资源进行竞争操作时若不会造成数据二义性时则线程安全;否则,此时就是不安全的如何实现线程安全常见的线程安全的情况每个线程对全局变量或者静态变量只有读取的权限,而没有写入的权限,一般来说这些线程是...
2019-05-17 18:26:52
8810
5
原创 Linux多线程
多线程越深入的学习之后,经常能听到这么一个词----多线程。之前的学习经常会提到多进程,父进程在忙不过来的情况下,会创建子进程进行帮忙,这样就是一个多进程的任务。那么什么是多线程呢?线程概念在传统的操作系统中,进程就是一个运行中程序的描述信息----pcb,控制程序的运行。在Linux操作系统下,pcb是进程,因为Linux下线程是以进程pcb模拟实现线程;也有人称为轻量级进程。但是Lin...
2019-05-15 17:04:42
687
2
原创 C++-类与对象
类与对象(第一部分)类与对象的初步认识很多语言都有这方面的区分,比如C语言是面向过程的语言,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。但是C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。类的引入在C语言中,结构体的使用只能定义变量,但是在C++中不一样,不仅可以定义变量还可以定义函数但在C++结构体的定义中,更喜欢用classl...
2019-05-14 11:14:11
379
原创 C++入门
终于进入了C++的学习。正所谓学好C++,走遍全天下。C++可以说为我打开了新世界。不过数据结构的知识还是得不断地复习啊C++关键字关键字在C语言中就已经见过了许多比如最常见的if-else,for,int,double等等。只不过在C++中还会遇到更多的,以后会慢慢学习命名空间C++引入命名空间这个概念是因为在我们编程中可能写到大量的函数,比如我在某个头文件中写了abc()这样一个函数,...
2019-05-07 22:13:15
474
原创 Linux进程信号
信号信号概念通知进程发生了某件事情导致了软件中断----会打断当前的阻塞操作,去处理事情信号的种类信号有不同的种类,每个信号都对应了不同的事件通过命令行kill -l可以查看信号的种类在图中可以看到这些都是信号的种类,总共有62个种信号1-31---->每个都有各自对应的事件 非可靠信号/非实时信号34-64---->后续添加的信号 可靠信号/非可靠信号信号...
2019-05-01 11:18:44
328
原创 Linux进程间通信
进程间通信一般简称为IPC----InterProcess Communication。是指在不同进程之间传播或交换信息。进程间通信有这么几个方式:管道(命名管道/匿名管道),共享队列,消息队列,信号量进程间为什么要通信呢?因为进程的独立性,因此想要通信必须能够共同访问一个相同的媒介。进程间通信的目的:数据传输,数据共享,进程间的访问控制。也正因为通信的目的不同,使用场景不同,因此操作...
2019-04-22 15:00:12
355
原创 数据结构之二叉树
树的概念树是一种非线性的结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把他叫做树是因为它看起来像一个倒挂的树,它的根是朝上的,但是它的叶是朝下的。它具有以下特点:每个节点有零个或多个子结点;没有父结点的称为根节点;每一个非根节点有且只有一个父结点;除了根节点外,每个子节点可以分为多个不相交的子树。关于树,还有一些相关知识,我们需要了解。节点的度:一个节点含有的子树的个...
2019-04-20 16:30:54
217
原创 Linux-基础IO+minishell重定向
文件的输入输出在c语言之前了解过。比如标准库的IO接口回顾C语言的库函数fopen,fread,fwrite,fseek,fclose这几个函数。关键在于参数的使用。例如fopen,FILE *fopen(const char *path, const char *mode),在不同的模式下打开文件所能作的操作也不同。文件使用方式含义如果指定文件不存在r–只读为了输...
2019-04-16 15:13:07
374
原创 Linux进程控制+minishell
在之前的Linux进程概念中提到了一些关于进程的创建。进程的创建通过fork函数创建子进程。进程终止进程终止顾名思义,进程结束。但是结束有各种可能,可能成功,可能失败,也可能异常。进程常见退出方法正常退出1、从main返回2、调用exit3、_exit异常退出ctrl + cexit函数#include <unistd.h> void _exit(int st...
2019-04-12 01:10:36
337
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅