qtooltip原始碼學習

2021-07-09 11:12:24 字數 819 閱讀 6252

最近由於工作需要,分析了qt原始碼中qtooltip的原始碼,有些收穫,記錄一下,供日後查閱。

qtooltip原始碼路徑:qt-everywhere-opensource-src-4.8.0\qt-everywhere-opensource-src-4.8.0\src\gui\kernel\qtooltip.cpp.

我們使用時,用的是qtooltip,但是實際上qtiplabel才是核心。qtiplabel繼承自qlabel,顯示外觀設定也使用qlabel的各種函式進行設定。如果想要實現自己的tooptip,可以將此類拿出來修改一下使用。

qtiplabel通過定時器、滑鼠事件控制tip的顯示隱藏。

從上述表示式可以看出,tip的顯示時間10秒多,根據文字內容長度有區別。顯示時間長短不可以修改,也沒有介面設定。

我們使用qlabel實現了自己的tooltip,但是顯示效果與qtooltip有區別,檢視了原始碼才發現是有很多屬性沒有設定,比如,我們的問題顯示緊靠下邊,發現是下面的屬性沒有設定:

setmargin(1+style()->pixelmetric(qstyle::pm_tooltiplabelframewidth, 0, this));

這個設定是我要檢視原始碼的初衷,因為測試提出我們的label太窄了,天殺的測試!

另乙個收穫是發現這個類中使用的定時器不是qtimer,而是qbasictimer,於是順便看了一下這兩個類的區別。

qbasictimer是輕量級的定時器,不繼承自qobject,所以沒有訊號、槽,但是在qobject的派生類的timerevent函式中可以捕獲這個定時器的訊息,增加自己的處理。方便快捷。少了訊號和槽,直接是事件了,應該在響應速度上會更快。

原始碼學習 ArrayList的擴容原始碼分析

原始碼如下 下面是arraylist的擴容機制 arraylist的擴容機制提高了效能,如果每次只擴充乙個,那麼頻繁的插入會導致頻繁的拷貝,降低效能,而arraylist的擴容機制避免了這種情況。如有必要,增加此arraylist例項的容量,以確保它至少能容納元素的數量 param mincapac...

PicoContainer原始碼學習

介紹下自己,我叫stef wu,是個菜鳥,現在在easyjf團隊學習,得到了大峽等人的熱情幫助。本序列文章是以前在學習研究picocontainer時所記錄下來的,希望借本文,能和正在學習pico新手或者研究pico的高手一起交流學習。由於我水平不好,而且是真實的從頭到尾的記錄,所以其中,特別是前面...

PicoContainer原始碼學習

介紹下自己,我叫stef wu,是個菜鳥,現在在easyjf團隊學習,得到了大峽等人的熱情幫助。本序列文章是以前在學習研究picocontainer時所記錄下來的,希望借本文,能和正在學習pico新手或者研究pico的高手一起交流學習。由於我水平不好,而且是真實的從頭到尾的記錄,所以其中,特別是前面...