1. 程式人生 > >QVariant保存指針數據

QVariant保存指針數據

som href 構造函數 mem log 標識 set elm ref

QVariant保存指針數據

QVariant默認無法保存指針數據,因為以void *為參數的QVariant構造函數是私有的。

但通過QT提供的Meta Type機制,可以將任意指針存放到QVariant中。

需要使用Q_DECLARE_METATYPE宏註冊類型。

Q_DECLARE_METATYPE(QStandardItemModel*)

之後,就可以使用QVariant::fromValue存放數據,使用QVariant::value獲取數據了。

return QVariant::fromValue(model_);
//....
QStandardItemModel* model = some_value.value();

使用QVariant和標識項目中數據類型的Qt::ItemDataRole,可以方便地將任意數據存放進QT提供的預定義模型中。

比如,在同一個QStandardItem中使用不同的Role,存放多個數據。

自定義的數據角色

enum CustomItemRole
{
    LevelModelRole =  Qt::UserRole + 1000,
    TimeModelRole = Qt::UserRole + 1010,
    FileModelRole = Qt::UserRole + 1020
};

存放特定角色的數據

type_of_level_item->setData(QVariant::fromValue(level_list_model),LevelModelRole);

獲取特定角色的數據

QVariant data = item->data(Qt::LevelModelRole);

http://windrocblog.sinaapp.com/?p=1166  

  

  

  

  

QVariant保存指針數據