Qt 核心特點

2021-10-09 16:07:03 字數 2645 閱讀 2635

本文主要對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 的屬性,使用readwrite關鍵字定義屬性的讀,寫函式。

其它關鍵字:

訊號與槽

通過建立訊號與槽,實現物件之間的通訊。

兩種connnect形式

1. qt4

qmetaobject::connection qobject::connect(const qobject *sender,

const char *signal,

const qobject *receiver,

const char *slot,

qt::connectiontype type = qt::autoconnection)

通過使用巨集signalslot指定訊號與槽,且可以指定引數型別,可用於過載;

//乙個訊號可以與另乙個訊號相連 

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 提供對網路程式設計支援的功能類 ...