QT源码解析笔记
1. QT如何绘制控件的
QT的绘制控件在QStyleSheetStyle::DrawControl里面,这里会调用默认的QSS来绘制效果
2. 在设置一次QSS以后,将会触发polish事件,里面将会一次设置大小,pallte和property等属性,在QWidget::event里面的polish事件的处理可以看出来 (在QWidget::Event里面会调用QStyleSheetStyle::polish)
3. 如何设置hover这些伪状态的变化:
1. polish事件处理的时候通过设pattle来设置
2. 在StyleSheet里面计算renderrule的时候
4. QT 是在哪里解析QSS的:
在styleChange里面会触发解析QSS的代码,具体在:
QVector<QCss::StyleRule> QStyleSheetStyle::styleRules
styleSheetCaches里面会保存所有的qss的解析代码,在qstylesheetstyle.cpp里面的静态变量
并且站styleRules的代码里面,会遍历所有的父亲拿到父亲的qss,然后查看是否有设置到自己的qss
polish是根据解析后的stylesheet将对应的数值复制到对应的widget属性里面
5.d->inheritStyle()将会在调用setParent的时候调用,或者在QWidget::setStyleSheet里面有传播的选项,会将style往下传递(这里是针对style的,而StyleRule则是针对属性的)
QWidgetPrivate::propagatePaletteChange
这个函数会将palette往下传递
6. qt绘制控件是在qwidget.cpp里面的drawWidget里面的,将会递归绘制所有的控件,此函数是通过QEvent::UpdateRequest来调用的
7. QWidgetPrivate::paintSiblingsRecursive 在这里将会发送绘制事件给子控件,然后子控件的paintEvent负责绘制
QTextStream
QTextStream里面 fillReadBuffer有一个codec
QGraphics Framework
SceneRect 返回的是当前所有元素的boundRect,比如我加入一个text,位置在0, 0, 74, 22, 则sceneRect会返回0, 0 , 74, 22
加入我们又加入一个text2, 位置在100, 100,则SceneRect则会是0, 0, 174, 122 (text宽度为74, 22)
如何判断MousePress一个Item
cachedItemsUnderMouse: 利用item的boundRect计算出与鼠标位置组成的矩阵是否有intersect,然后利用shape()调用的函数与鼠标的矩形进行intersect,如果有话则代表有点击到
当Select一个Item以后,如何取消Select:
当Press以后,将会取消所有的item的select,然后再进行判断是否select
select以后,事件传递机制有什么变化
按钮设置为mask以后,如何只判断点击到mask里面
利用QRegion
QT的信号传输机制
同一个线程,同步传输
不同的线程,异步传输
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2013-06-12 Windows黑客基础(2):获取其他进程的HANDLE