對於qobject及其子類可以通過qobject_cast()函式進行動態對映dynamic cast。
假設qmywidget是qwidget的子類,並且在類定義中宣告了q_object巨集,
qobject *obj = new qmywidget();
obj實際指向qmywidget類,所以可以正確投射為qwidget
qwidget *widget = qobject_cast(obj);
obj實際是qmywdiget類,是qwidget的子類,投射是成功的。
qobject_cast並不區分qt內建的型別和使用者自定義的型別。
若要講obj投射到qlabel則是失敗的
返回的label是null,因為qmywidget不是qlabel的子類
使用動態投射,使得程式在遇到不同的物件做不同的處理
qlabel *label = qobject_cast(obj);'
以下為例項:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include #include #include mainwindow::mainwindow(qwidget *parent) :
qmainwindow(parent),
ui(new ui::mainwindow)
mainwindow::~mainwindow()
void mainwindow::showobject(qobject *obj)
qmetaobject::classname( )函式可返回類的名稱字串。
其實這個就是c++的虛函式實現的。
動態對映和靜態對映
先說virtualalloc和virtualcopy virtualalloc 首先會從我們的虛擬位址空間中申請 或者說預留 一塊虛擬空間,準備接下來要用它。注意此時,可用的物理記憶體並沒有減少,只是虛擬位址少了一塊可用的區域。真正把這塊之前 reserved 的虛擬空間對映到物理的記憶體區域就是由...
qt的記憶體對映
uchar qfiledevice map qint64 offset,qint64 size,qfiledevice memorymapflags flags nooptions 從偏移量開始將檔案的大小位元組對映到記憶體中。應該開啟乙個檔案以使對映成功,換句話說就是對映必須開啟乙個檔案,但在對映...
ibatis 動態對映
在複雜查詢過程中,我們常常需要根據使用者的選擇決定查詢條件,這裡發生變化的並不只是sql 中的引數,包括select 語句中所包括的字段和限定條件,都可能發生變化。典型情況,如在乙個複雜的組合查詢頁面,我們必須根據使用者的選擇和輸入決定查詢的條件組合。乙個典型的頁面如下 對於這個組合查詢頁面,根據使...