GetOBSRef 解析

来源:互联网 发布:富网络应用模式 程序 编辑:程序博客网 时间:2024/06/13 05:01
template <typename T>
static T GetOBSRef(QListWidgetItem *item)
{
return item->data(static_cast<int>(QtDataRole::OBSRef)).value<T>();

}

1)先分析一下item->data()

[virtual]QVariant QListWidgetItem::data(introle) const

Returns the item's data for a givenrole. Reimplement this function if you need extra roles or special behavior for certain roles.

role <<---static_cast<int>(QtDataRole::OBSRef)

2)再分析下QtDataRole::OBSRef

enum class QtDataRole {
OBSRef = Qt::UserRole,//OBSRef = UserRole
OBSSignals,
};

3)分析下UserRole

 enum ItemDataRole {
        DisplayRole = 0,
        DecorationRole = 1,
        EditRole = 2,
        ToolTipRole = 3,
        StatusTipRole = 4,
        WhatsThisRole = 5,
        // Metadata
        FontRole = 6,
        TextAlignmentRole = 7,
        BackgroundColorRole = 8,
        BackgroundRole = 8,
        TextColorRole = 9,
        ForegroundRole = 9,
        CheckStateRole = 10,
        // Accessibility
        AccessibleTextRole = 11,
        AccessibleDescriptionRole = 12,
        // More general purpose
        SizeHintRole = 13,
        InitialSortOrderRole = 14,
        // Internal UiLib roles. Start worrying when public roles go that high.
        DisplayPropertyRole = 27,
        DecorationPropertyRole = 28,
        ToolTipPropertyRole = 29,
        StatusTipPropertyRole = 30,
        WhatsThisPropertyRole = 31,
        // Reserved
        UserRole = 0x0100//其中的一种
    };

4)QVariant

QVariant行为类似于C/C++的union, 但在Qt中比union强大很多, QVariant内置支持所有QMetaType::Type里的类型如:int,QString,QFont等甚至QList<QVariant>,
QMap<QString, QVariant>等组成的任意复杂类型. 主要应该在Qt项中附带额外的数据,如setData(),setItemData()等,和数据序列化中.简单的说QVariant可存储任意类型.

5)使用

 GetOBSRef<OBSScene>(item)






原创粉丝点击