QVariant類 萬能數據類型

QVariant 萬能數據類型爲各種數據類型之間的轉換提供了可能。
使C++的強數據類型可能成爲了弱數據類型。
Qt下的QVariant只支持已註冊的數據類型,可以將自定義的類等註冊,使得QVariant可以識別自定義的類。

myStructor c;
QVariant v;
v.setValue (c);    //將會錯誤--Qvariant還不認識myStructor呢。

Q_DECLARE_METATYPE(myStructor)。使用Q_DECLARE_METATYPE在 **全局中** 註冊

 v.value < myStructor >(); 取值方法
例子:
將一個指針賦予QVariant--可能有需要將一個指針賦予樹型列表控件(QTreeWidget)中一個條目--點擊此條目獲取指針對數據進行處理--而無須通過查找來取得數據--縮短處理時間。

用int指針作爲例子--QVariant不支持此類型必須先註冊。
ifndef __XXX__
define __XXX__

Q_DECLARE_METATYPE(int*);

endif

附帶記下如何在QTreeWidget控件中附加數據

增加Item
QTreeWidgetItem* newItem = new QTreeWidgetItem;

...增加newItem到treeWidget中...

int* itemVal = new int (123);
QVariant Var;
Var.setValue (testVal); // 已註冊了int*--正確編譯
newItem->setData (0, 0, Var); //newItem的第一列附加了Var--即指向itemVal的指針
                              //第二個參數爲role角色的意思--我也不懂啥意思

點擊某個條目獲取對應的數據
on_treeWidget_click ()
{
    ...取得選擇的條目-curItem...
    //Data()的參數和當時設置數據的參數一樣,value()是取得var的數據
    int* ptr = curItem->Data (0, 0).value < int* >(); 

    ...對ptr進行處理...
}

轉載自 http://blog.chinaunix.net/uid-10554711-id-2948398.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章