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源码解析笔记的更多相关文章

  1. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...

  2. QT源码解析(七)Qt创建窗体的过程,作者“ tingsking18 ”(真正的创建QPushButton是在show()方法中,show()方法又调用了setVisible方法)

    前言:分析Qt的代码也有一段时间了,以前在进行QT源码解析的时候总是使用ue,一个函数名在QTDIR/src目录下反复的查找,然后分析函数之间的调用关系,效率实在是太低了,最近总结出一个更简便的方法, ...

  3. Qt源码解析之-从PIMPL机制到d指针

    一.PIMPL机制 PIMPL ,即Private Implementation,作用是,实现 私有化,力图使得头文件对改变不透明,以达到解耦的目的 pimpl 用法背后的思想是把客户与所有关于类的私 ...

  4. SpringMVC 源码解析笔记

    作者笔记仓库:https://github.com/seazean/javanotes 欢迎各位关注我的笔记仓库,clone 仓库到本地后使用 Typora 阅读效果更好. 一.调度函数 请求进入原生 ...

  5. TreeSet源码解析笔记

    定义: TreeSet是一个有序的集合,它的作用是提供有序的Set集合.它继承了AbstractSet抽象类,实现了NavigableSet<E>,Cloneable,Serializab ...

  6. TreeMap源码解析笔记

    常见的数据结构有数组.链表,还有一种结构也很常见,那就是树.前面介绍的集合类有基于数组的ArrayList,有基于链表的LinkedList,还有链表和数组结合的HashMap,今天介绍基于树的Tre ...

  7. HashSet源码解析笔记

    HashSet是基于HashMap实现的.HashSet底层采用HashMap来保存元素,因此HashSet底层其实比较简单. HashSet是Set接口典型实现,它按照Hash算法来存储集合中的元素 ...

  8. HashMap源码解析笔记

    首先简单介绍下HashMap: 1.HashMap有三种数据结构:数组,链表,红黑树. 2.HashMap是非线程安全的 3.HashMap存储的内容是键值对(key-value)映射,key.val ...

  9. SpringBoot 源码解析笔记

    作者笔记仓库:https://github.com/seazean/javanotes 欢迎各位关注我的笔记仓库,clone 仓库到本地后使用 Typora 阅读效果更好. 如果大家只关注 Sprin ...

随机推荐

  1. 关于日志类Log4j的使用

    log4j 的配置 #下面定义日志输出级别是 INFO,并且配置了2个输出目的地,一个是A3,一个是console log4j.rootLogger = INFO,A3,CONSOLE #日志最低的输 ...

  2. sql中in和exist语句的区别?(补充了left join和right join)

    in和exists(摘录自百度)in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询. 如果两个表中一个较小,一个是大表,则子查询表大的用exi ...

  3. Spring整合JUnit4测试时,使用注解引入多个配置文件

    转自:https://blog.csdn.net/pwh309315228/article/details/62226372 一般情况下: @ContextConfiguration(Location ...

  4. shell入门-grep2

    案例介绍 搜索关键词带‘root’的行 并输出行号 [root@wangshaojun ~]# cg -n 'root' 1.txt1:root:x:0:0:root:/root:/bin/bash1 ...

  5. C语言学习笔记--单引号和双引号

    (1)C 语言中单引号用来表示字符字面量(是个数值)被编译为对应的 ASCII 码 (2)C 语言中双引号用来表示字符串字面量(是个指针)被编译为对应的内存地址 例如:'a'表示字符字面量(97),在 ...

  6. 加减 script函数初识

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 【机器学习】推荐系统、SVD分解降维

    推荐系统: 1.基于内容的实现:KNN等 2.基于协同滤波(CF)实现:SVD → pLSA(从LSA发展而来,由SVD实现).LDA.GDBT SVD算是比较老的方法,后期演进的主题模型主要是pLS ...

  8. Linux——DNS

    正向解析和逆向解析  正向域名解析,即DNS解析,是通过域名查询IP的解析方式.  逆向域名解析,即反向DNS解析,是通过IP地址查询域名. [root@localhost ~]# cp /var ...

  9. Swoole 整合成一个小框架

    目录 概述 效果 代码 小结 概述 这是关于 Swoole 学习的第六篇文章:Swoole 整合成一个小框架. 第五篇:Swoole 多协议 多端口 的应用 第四篇:Swoole HTTP 的应用 第 ...

  10. Python中读取,显示,保存图片的方法

    一 opencv import cv2 as cv # load img = cv.imread(imagepath) # shape=(height, width, channel) h,w,c = ...