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::styleRulescode
styleSheetCaches裏面會保存全部的qss的解析代碼,在qstylesheetstyle.cpp裏面的靜態變量
而且站styleRules的代碼裏面,會遍歷全部的父親拿到父親的qss,而後查看是否有設置到本身的qss遞歸
polish是根據解析後的stylesheet將對應的數值複製到對應的widget屬性裏面事件
5.d->inheritStyle()將會在調用setParent的時候調用,或者在QWidget::setStyleSheet裏面有傳播的選項,會將style往下傳遞(這裏是針對style的,而StyleRule則是針對屬性的)get
QWidgetPrivate::propagatePaletteChange
這個函數會將palette往下傳遞同步
6. qt繪製控件是在qwidget.cpp裏面的drawWidget裏面的,將會遞歸繪製全部的控件,此函數是經過QEvent::UpdateRequest來調用的qt
7. QWidgetPrivate::paintSiblingsRecursive 在這裏將會發送繪製事件給子控件,而後子控件的paintEvent負責繪製it
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的信號傳輸機制
同一個線程,同步傳輸
不一樣的線程,異步傳輸