QVariant保存指針數據
阿新 • • 發佈:2018-04-22
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保存指針數據