Qt4開發總結

2021-05-23 13:50:43 字數 3158 閱讀 1193

對qt的認識和開發還只是剛剛起步,但作乙個階段學習的總結還是很必要的。

c++ gui programming with qt 4, second edition,這裡講了qt程式的寫法,以及各個類的應用。

inside qt series:深入介紹了qt的實現機制

1.qt的事件處理機制

事件起源:

qt的signal slot 機制與事件驅動機制的區別在於:

1)signal slot是同步的,而事件可以同步(sendign)也可以非同步(posting);

2)當乙個signal被emit出來的時候,鏈結到這個signal的slot會立刻被呼叫,就好像是乙個函式呼叫一樣。當有多個slot鏈結到乙個signal的時候,這些slot會乙個接著乙個的、以隨機的順序被執行。

3)as a rule, signals are useful when using a widget, whereas events are useful when implementing a widget.即訊號是一種較高階的機制,事件是一種較低階的機制。

4)都可用於跨執行緒環境。

qt的event常見的使用情況有情況:

1)繼承類,重寫類的特定event處理函式:如重寫qtextedit的focusinevent和focusoutevent

2)重寫qobject::event(),能在事件到達類的特定event處理函式前處理它。在需要改變tab鍵的慣用法時這樣做。也可以處理那些沒有特定事件處理函式的比較少見的事件型別(例如,qevent::hoverenter)。我們重寫event()時,必須要呼叫基類的event(),由基類處理我們不需要處理的那些情況。

3)給單獨的qobject物件安裝事件過濾器:物件用installeventfilter()註冊後,所有目標物件的事件都首先到達監視物件的eventfilter()函式。如果乙個物件有多個事件過濾器,過濾器按順序啟用,先到達最近安裝的監視物件,最後到達最先安裝的監視物件。

2.qt的元物件系統

meta object system 的設計基於以下幾個基礎設施:

* qobject 類

作為每乙個需要利用元物件系統的類的基類

* q_object 巨集,

定義在每乙個類的私有資料段,用來啟用元物件功能,比如,動態屬性,訊號和槽

* 元物件編譯器moc (the meta object complier),

moc 分析c++原始檔,如果它發現在乙個標頭檔案(header file)中包含q_object 巨集定義,然後動態的生成另外乙個c++原始檔,這個新的原始檔包含 q_object 的實現**,這個新的 c++ 原始檔也會被編譯、鏈結到這個類的二進位制**中去,因為它也是這個類的完整的一部分。通常,這個新的c++ 原始檔會在以前的c++ 源檔名前面加上 moc_ 作為新檔案的檔名。

q_object巨集

meta object 的功能實現,這個巨集立下了汗馬功勞。首先,讓我們來看看這個巨集是如何定義的:

1#define q_object /

2public: /

3q_object_check /

4staticconstqmetaobject staticmetaobject; /

5virtualconstqmetaobject *metaobject()const; /

6virtualvoid*qt_metacast(constchar*); /

7qt_tr_functions /

8virtualintqt_metacall(qmetaobject::call,int,void**); /

9private:

這裡,我們先忽略q_object_check 和qt_tr_functions 這兩個巨集。

我們看到,首先定義了乙個靜態型別的類變數staticmetaobject,然後有乙個獲取這個物件指標的方法metaobject()。這裡最重要的就是類變數staticmetaobject 的定義。這說明所有的 qobject 的物件都會共享這乙個staticmetaobject 類變數,靠它來完成所有訊號和槽的功能,所以我們就有必要來仔細的看看它是怎麼回事了。

01structq_core_export qmetaobject

02d;

10};

QT4 開發環境搭建

一 選擇qt4.8.7的原因 本人從事嵌入式gui開發,目前開源的ui框架,qt是首選。首先在qt4和qt5的選擇上,個人看法 qt4相對比較成熟,元件沒有qt5那麼多,但qt4能應對大多數gui開發的需求,包括介面美化。而qt4.8.7又是qt4的最後乙個版本,同時能夠在qt官方找到指定的ming...

QT4 的移植總結

這段時間把qt4移植到了mini2440的開發板上,同時做了一些應用的開發,特總結一下。首先要弄清楚一些概念 1.什麼是qt?qt 是乙個跨平台應用程式框架。通過使用 qt,您可以一次性開發應用程式和使用者介面,然後將其部署到多個桌面和嵌入式作業系統,而無需重複編寫源 qt 軟體前身為 trollt...

QT4 的移植總結

這段時間把qt4移植到了mini2440的開發板上,同時做了一些應用的開發,特總結一下。首先要弄清楚一些概念 1.什麼是qt?qt 是乙個跨平台應用程式框架。通過使用 qt,您可以一次性開發應用程式和使用者介面,然後將其部署到多個桌面和嵌入式作業系統,而無需重複編寫源 qt 軟體前身為 trollt...