Qt之qobject cast的描述

2021-08-04 17:09:11 字數 898 閱讀 3482

qobject_cast的原型如下

t qobject_cast(qobject *object)
如果傳入的object是t或者t的子類,則返回t,否則返回0。如果object是0則返回0。

類t必須直接(或間接)繼承自qobject,並且要宣告巨集q_object。

類通常繼承本身。

舉例:

qobject *obj = new qtimer;  // qtimer繼承qobject

qtimer *timer = qobject_cast(obj); // timer == (qobject *)obj

qabstractbutton *button = qobject_cast(obj); // button == 0

警告:如果t沒有宣告巨集q_object,那麼函式的返回值是不確定的。

使用場景:

當某乙個object emit乙個signal的時候,它就是乙個sender,系統會記錄下當前是誰emit出這個signal的,

所以你在對應的slot裡就可以通過sender()得到當前是誰invoke了你的slot。

有可能多個 object的signal會連線到同乙個slot(例如多個button可能會connect到同乙個slot函式onclick()),

因此這是就需要判斷到底是哪個object emit了這個signal,根據sender的不同來進行不同的處理.

在槽函式中:

qobject *obj = sender();    // 返回發出訊號的物件,用qobject型別接收

qpushbutton *button = qobject_cast(obj); // 向下轉型為按鈕型別

Qt動態對映qobject cast

對於qobject及其子類可以通過qobject cast 函式進行動態對映dynamic cast。假設qmywidget是qwidget的子類,並且在類定義中宣告了q object巨集,qobject obj new qmywidget obj實際指向qmywidget類,所以可以正確投射為qw...

Qt 安全的轉換方式qobject cast

功能 函式原型 t qobject cast qobject object 本方法返回object向下的轉型t,如果轉型不成功則返回0,如果傳入的object本身就是0則返回0。在使用時有兩個限制 1 t型別必須繼承自qobject。2 在宣告時必須有q object巨集。應用 多個物件的 sign...

QT之Qt之Q PROPERTY巨集理解

qt中的q property巨集在qt中是很常用的,那麼它有什麼作用呢?qt提供了乙個絕妙的屬性系統,q property 是乙個巨集,用來在乙個類中宣告乙個屬性property,由於該巨集是qt特有的,需要用moc進行編譯,故必須繼承於qobject類。q property type name r...