role
,也就是俗稱的角色.c++
##roleNames()函數介紹及默認值 roleNames()
函數返回一個model
的全部角色名稱. 在Qt中默認的角色名稱以下:函數
Qt Role | QML Role Name |
---|---|
Qt::DisplayRole | display |
Qt::DecorationRole | decoration |
Qt::EditRole | edit |
Qt::ToolTipRole | toolTip |
Qt::StatusTipRole | statusTip |
Qt::WhatsThisRole | whatsThis |
##自定義roleNames() Qt舊版本中,能夠經過setRoleNames()
函數來實現本身想要的角色名,url
This function is obsolete. Reimplement roleNames() instead.code
可是根據Qt5.6.0新版本相關文檔的介紹,該函數已通過時,須要經過從新實現roleNames()
來替代setRoleNames()
. 這意味着:若是咱們想要自定義的角色名,則須要從新實現虛函數roleNames()
.ip
接下來,咱們看看到底如何自定義roleNames()
:ci
//customModel.h #include <QAbstractItemModel> class customModel : public QAbstractItemModel { Q_OBJECT public: enum StringListRoles{ IconRole = Qt::UserRole + 1, //都是Role結尾的 TextRole = Qt::UserRole + 2, UrlRole = Qt::UserRole + 3 }; explicit customModel(QObject *parent = 0); ~customModel(); QHash<int, QByteArray> roleNames() const; //從新實現roleNames() }
roleNames()
//customModel.cpp //角色名 QHash<int, QByteArray> customModel::roleNames() const { //這裏插入的值須要和前面定義的枚舉類型對應 QHash<int, QByteArray> roleNames; roleNames.insert(customModel::IconRole, QByteArray("icon")); roleNames.insert(customModel::TextRole, QByteArray("text")); roleNames.insert(customModel::UrlRole, QByteArray("url")); return roleNames; }
而後就能夠自由使用本身想要的role
了.文檔
注意: QListView & QTreeView & QTableView
等視圖默認使用的是Qt裏roleNames()
返回的默認角色,因此若是想要視圖識別和讀取自定義的角色名,還要從新實現對應的delegate
.it