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...