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. Sublime Text 全程指南(转载)

    摘要(Abstract) 本文系统全面的介绍了Sublime Text,旨在成为最优秀的Sublime Text中文教程. 更新记录 2014/09/27:完成初稿 2014/09/28: 更正打开控 ...

  2. python 3中对list进行sort时,返回值为None

    进行在用python的list结构时, 发现一个问题: methods = [&apos;blogger.deletePost&apos;, &apos;blogger.get ...

  3. poj 1658 Eva's Problem(水题)

    一.Description Eva的家庭作业里有很多数列填空练习.填空练习的要求是:已知数列的前四项,填出第五项.因为已经知道这些数列只可能是等差或等比数列,她决定写一个程序来完成这些练习. Inpu ...

  4. NorthSJ项目零碎知识点

    1 div显示纵向滚动条: <div style="overflow-y:auto;overflow-x:hidden;"></div> 2 FineUI的 ...

  5. 【转】 Pro Android学习笔记(三四):Menu(5):动态菜单

    目录(?)[-] OptionsMenu的创建方式 如何再次创建OptionsMenu 每次访问都重新填充菜单项 OptionsMenu的创建方式 OptionMenu在第一次访问该菜单时调用,只调用 ...

  6. Hibernate Validator--创建自己的约束规则

    尽管Bean Validation API定义了一大堆标准的约束条件, 但是肯定还是有这些约束不能满足我们需求的时候, 在这种情况下, 你可以根据你的特定的校验需求来创建自己的约束条件. 3.1. 创 ...

  7. net.sf.json-lib maven依赖问题.

    <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</art ...

  8. assert.ifError()

    assert.ifError(value) 如果 value 为真,则抛出 value. 可用于测试回调函数的 error 参数(通俗解释ifError方法断定某个表达式是否false,如果该表达式对 ...

  9. Centos下添加/删除用户

    useradd具体参数 [root@yhwang ~] useradd -h Usage: useradd [options] LOGIN useradd -D useradd -D [options ...

  10. ZOJ 3939 The Lucky Week (暴力找规律)

    题意:给定一个幸运日,求第 k 个幸运日是多少. 析:由于闰年,每400肯定会循环一次,所以我们就可以先找出每400年会有多少幸运日,是2058个,然后再暴力. 代码如下: #pragma comme ...