本文主要對qt中一些核心的特點進行簡單的介紹。
元物件系統
元物件系統(meta-object system)提供了物件之間通訊的訊號與槽、執行時型別資訊和動態屬性系統。
主要有三部分組成:
對於qobject
及其子類,可以使用qobject_cast()
函式進行型別轉換,類似c++中的 dynamic_static() 的下行轉換。
qobject *obj = new qmywidget;
//以下兩種轉換都是可以的,從基類到派生類的轉換;
qwidget *widget = qobject_cast(obj);
qwidget *mywidget = qobject_cast(obj);
//下面的轉換是失敗的
qlabel *label = qobject_cast(obj); //沒有繼承關係
屬性系統q_property(type name read name write setname notify namechanged)
使用q_property()
巨集去定義屬性,該方式也是通過元物件系統實現的。
q_property
定義了乙個返回值為type,名稱為name 的屬性,使用read
、write
關鍵字定義屬性的讀,寫函式。
其它關鍵字:
訊號與槽
通過建立訊號與槽,實現物件之間的通訊。
兩種connnect形式
1. qt4
qmetaobject::connection qobject::connect(const qobject *sender,
const char *signal,
const qobject *receiver,
const char *slot,
qt::connectiontype type = qt::autoconnection)
通過使用巨集signal
和slot
指定訊號與槽,且可以指定引數型別,可用於過載;
//乙個訊號可以與另乙個訊號相連
connect(object1,signal(signal1),object2,signal(signal2));
//同乙個訊號可以與多個槽相連,此時呼叫槽的順序是隨機的
connect(object1,signal(signal1),object2,slot(slot1));
connect(object1,signal(signal1),object3,slot(slot2));
//同乙個槽也可以響應多個訊號
connect(object1,signal(signal1),object3,slot(slot1));
connect(object2,signal(signal2),object3,slot(slot1));
//要把訊號和槽(或訊號)成功連線,被連線的兩者,其引數必須有相同的順序和型別,
//這裡有個例外是,如果訊號的引數比它連線的槽的引數多,多餘的引數會被簡單的忽略掉
connect(object1,signal(signal(int,const qstring&)),object2,signal(signal(int,const qstring&));
2.qt5
qmetaobject::connection qobject::connect(const qobject *sender,
const qmetamethod &signal,
const qobject *receiver,
const qmetamethod &slot,
qt::connectiontype type = qt::autoconnection)
qt5 中通過使用函式指標的方式進行連線,可使用lambda表示式對槽函式進行定義。
qpushbutton *button = new qpushbutton(this);
connect(button,&qpushbutton::pressed,this,&mainwindow::close);
//connect(button,&qpushbutton::pressed,this,());
兩種方法的比較connect(combox,static_cast(&qcombobox::activated),())
tip
使用sender()函式可獲得訊號的傳送者。
qspainbox *spainbox = qobject_cast(sender());
自定義訊號及其使用
自定義訊號在類中定義,無需實現,只需發射(emit)
class qperson : public qobject;
void qperson::incage()
Qt核心程式設計
qt模板庫 qttemplate library 簡稱qtl 是一套提供物件容器的模板。如果你的編譯器沒有適當的stl 標準模板庫 可用,qtl將被代替使用。qtl提供了物件的鍊錶 物件的向量 動態陣列 從乙個型別到另乙個型別的對映 或稱為字典 和相關的迭代器和演算法。乙個容器是包含和管理其它物件的...
Linux核心開發的特點
linux核心開發的特點 相對於使用者空間內的應用程式開發,核心開發存在很多的不同,最重要的差異包括以下幾種 1 核心程式設計時不能訪問c庫。2 核心程式設計時必須使用gnu c。3 核心程式設計時缺乏像使用者空間那樣的記憶體保護機制。4 核心程式設計時浮點數很難使用。5 核心只有乙個很小的定長堆疊...
Qt核心模組的組成
下面是qt 模組的組成,我翻譯了一下qt assistant中的東東,大家看看,有什麼地方翻譯的不妥。通用軟體開發模組 qtcore 核心非圖形介面類,為其他模組所呼叫 qtgui gui 圖形使用者介面 功能模組 qt 提供低階多 功能支援的類 qtnetwork 提供對網路程式設計支援的功能類 ...