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