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的信号传输机制
同一个线程,同步传输
不同的线程,异步传输
QT源码解析笔记的更多相关文章
- QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数
QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...
- QT源码解析(七)Qt创建窗体的过程,作者“ tingsking18 ”(真正的创建QPushButton是在show()方法中,show()方法又调用了setVisible方法)
前言:分析Qt的代码也有一段时间了,以前在进行QT源码解析的时候总是使用ue,一个函数名在QTDIR/src目录下反复的查找,然后分析函数之间的调用关系,效率实在是太低了,最近总结出一个更简便的方法, ...
- Qt源码解析之-从PIMPL机制到d指针
一.PIMPL机制 PIMPL ,即Private Implementation,作用是,实现 私有化,力图使得头文件对改变不透明,以达到解耦的目的 pimpl 用法背后的思想是把客户与所有关于类的私 ...
- SpringMVC 源码解析笔记
作者笔记仓库:https://github.com/seazean/javanotes 欢迎各位关注我的笔记仓库,clone 仓库到本地后使用 Typora 阅读效果更好. 一.调度函数 请求进入原生 ...
- TreeSet源码解析笔记
定义: TreeSet是一个有序的集合,它的作用是提供有序的Set集合.它继承了AbstractSet抽象类,实现了NavigableSet<E>,Cloneable,Serializab ...
- TreeMap源码解析笔记
常见的数据结构有数组.链表,还有一种结构也很常见,那就是树.前面介绍的集合类有基于数组的ArrayList,有基于链表的LinkedList,还有链表和数组结合的HashMap,今天介绍基于树的Tre ...
- HashSet源码解析笔记
HashSet是基于HashMap实现的.HashSet底层采用HashMap来保存元素,因此HashSet底层其实比较简单. HashSet是Set接口典型实现,它按照Hash算法来存储集合中的元素 ...
- HashMap源码解析笔记
首先简单介绍下HashMap: 1.HashMap有三种数据结构:数组,链表,红黑树. 2.HashMap是非线程安全的 3.HashMap存储的内容是键值对(key-value)映射,key.val ...
- SpringBoot 源码解析笔记
作者笔记仓库:https://github.com/seazean/javanotes 欢迎各位关注我的笔记仓库,clone 仓库到本地后使用 Typora 阅读效果更好. 如果大家只关注 Sprin ...
随机推荐
- RS485波特率问题
转载请注明出处:http://blog.csdn.net/qq_26093511/article/details/51683648 最近再做一个项目,发现485不能发送数据,感到非常奇怪!后来查阅相关 ...
- 【Redis】Redis事务详解,Redis事务支持回滚(不支持悲观锁)
1.redis事物参考:https://baijiahao.baidu.com/s?id=1613631210471699441&wfr=spider&for=pc (php操作red ...
- python包管理
如果是python 项目目录,例如pycharm里新建的python项目,则可以通过from,import导入目录下的文件夹. 如果是普通文件目录,则代码里不能相对方式导入该目录下的文件夹,需要加入要 ...
- storm源码分析之topology提交过程
storm集群上运行的是一个个topology,一个topology是spouts和bolts组成的图.当我们开发完topology程序后将其打成jar包,然后在shell中执行storm jar x ...
- SuperSocket使用自定义协议与服务端通信发送实例
AsyncTcpSession tcpSession = new AsyncTcpSession(); public Encoding encoding = Encoding.GetEncoding( ...
- 定时处理组件---Quartz.net
1.认识任务调度 所谓任务调度,就是以将业务区块任务化(即抽象成每一个独立的任务,执行每个任务便完成某种业务的需求).比如,我们有一个订单系统,现在有这样的一个需求,就是需要在某一时间点去扫描数据库, ...
- [CentOS7] at, bash, cron, anacron
声明:本文主要总结自:鸟哥的Linux私房菜-第十五章.例行性工作排程(crontab),如有侵权,请通知博主 at => /var/spool/at /etc/at.allow, /etc/a ...
- [CentOS7] parted用于磁盘分区(同时支持GPT和MBR分区表)
声明:本文主要总结自:鸟哥的Linux私房菜-第七章.Linux 磁碟與檔案系統管理,如有侵权,请通知博主 fdisk支持MBR分区表,gdisk支持GPT分区表,而parted支持两者 不知道为什么 ...
- C++的STL总结(1)
没有很系统的学过算法,c++也只是学些基础,虽然经常会用一些STL里面的函数,但是并没有对STL模板库有一个清晰的了解,趁着寒假有时间就自己在网上百度浏览别人的总结的内容,自己汇集并总结了一下,希望对 ...
- 【转】processOnServer
源地址:http://blog.csdn.net/dl020840504/article/details/8856853