我刚刚开始编程QT,需要整合一个小工具,在树视图中显示数据,并允许在文本字段中编辑相关数据。要在树视图中显示的层次结构由不同的对象类型组成,我需要根据所选对象的类型启用/禁用菜单中的不同选项。启用/禁用菜单选项的信息不应该是树视图中显示信息的一部分,所以我使用data()
中的字段打折有没有办法扩展QAbstractItemModel所以我可以整齐地检索我需要的信息?或者我是否完全误解了这个概念,并且在显示菜单时需要以某种方式直接访问所选对象?
答案 0 :(得分:2)
它远远超过QXXXModel数据()中的显示内容。请参阅QStandardItemModel :: data()或setData(),这是一个名为Qt :: Role role的参数,它指定数据的用途。 data()实际上是指一个QMap,默认情况下我们得到QVariant对应的Qt :: DisplayRole,而其他角色如Qt :: Decoration数据存储图标,从Qt :: CustomRole + 1,可以存储和检索自定义数据。例如:
SetupDataModel{
const int MyInfoRole = Qt::CustomRole + 100;
QAbstractItemModel *model = view->model();
model->setData(index, "Display text"); // for display
QVariant objectType(....); // your "hidden" information to be stored, say an integer indicating type, or a string
model->setData(index, objectType, MyInfoRole);
}
On_item_clicked{
// when the item is selected
QVariant objType = index.data();
// cast the objType to your information
}