對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 /
2
public
: /
3
q_object_check /
4
static
const
qmetaobject staticmetaobject; /
5
virtual
const
qmetaobject *metaobject()
const
; /
6
virtual
void
*qt_metacast(
const
char
*); /
7
qt_tr_functions /
8
virtual
int
qt_metacall(qmetaobject::call,
int
,
void
**); /
9
private
:
這裡,我們先忽略q_object_check 和qt_tr_functions 這兩個巨集。
我們看到,首先定義了乙個靜態型別的類變數staticmetaobject,然後有乙個獲取這個物件指標的方法metaobject()。這裡最重要的就是類變數staticmetaobject 的定義。這說明所有的 qobject 的物件都會共享這乙個staticmetaobject 類變數,靠它來完成所有訊號和槽的功能,所以我們就有必要來仔細的看看它是怎麼回事了。
01
struct
q_core_export qmetaobject
02
d;
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...