Qt 安全的轉換方式qobject cast

2021-09-27 02:54:51 字數 863 閱讀 4826

功能:

函式原型:

t qobject_cast ( qobject * object )

本方法返回object向下的轉型t,如果轉型不成功則返回0,如果傳入的object本身就是0則返回0。

在使用時有兩個限制:

1、t型別必須繼承自qobject。

2、在宣告時必須有q_object巨集。

應用:多個物件的 signal 會連線到同乙個 slot 時(例如多個button可能會connect到乙個slot函式onclick())。

用法:

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

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

if (button_tmp != nullptr) //是否轉型成功

qobject_cast 安全在於:當obj不屬於qpushbutton 的型別或者其子類的時候不能轉換

qpushbutton *button_tmp = qobject_cast(obj);
而強制轉換無論obj 是什麼型別都能轉換成功,轉換後截斷也好,超位也好,都能夠成功。這樣是非常不安全的!!

qpushbutton * button_tmp = (qpushbutton *)obj;
參考部落格1

參考部落格2

qt中字元的轉換

qt中將int long型轉換成char string char轉換成qstring qstring buf qstring qlatin1string char char 轉換為qstring qstring 賦值為char str.tostdstring c str 例如char tockeni...

Qt中的unicode轉換

在qt中,在大多數情況下都是採用unicode的形式儲存的,但是qbytearray實際上是以char的形式儲存的,因此轉換成unicode表示的qstring時需要根據編碼的型別進行轉換。cpp view plain copy include include include include int...

qt中字元的轉換

qt中將int long型轉換成char string char轉換成qstring qstring buf qstring qlatin1string char char 轉換為qstring qstring 賦值為char str.tostdstring c str 例如char tockeni...