QT 模型/视图编程:我应该如何检索上下文菜单选项的额外数据?
Posted
技术标签:
【中文标题】QT 模型/视图编程:我应该如何检索上下文菜单选项的额外数据?【英文标题】:QT Model/View programming: how should I retrieve extra data for context menu options? 【发布时间】:2014-03-05 21:13:03 【问题描述】:我刚刚开始编写 QT 并且需要组合一个小实用程序,它可以在树形视图中显示数据并允许在文本字段中编辑相关数据。要在树视图中显示的层次结构由不同的对象类型组成,我需要根据所选对象的类型启用/禁用菜单中的不同选项。启用/禁用菜单选项的信息不应该是树视图中显示信息的一部分,所以我使用 data() 中的字段打折
有没有办法扩展 QAbstractItemModel 以便我可以整齐地检索我需要的信息?还是我完全误解了这个概念,需要在显示菜单时以某种方式直接访问所选对象?
【问题讨论】:
【参考方案1】:远远不止在 QXXXModel 的 data() 中显示内容。参考 QStandardItemModel::data() 或 setData() 有一个参数叫做 Qt::Role 角色,它指定了数据的用途。 data()其实是指一个QMap,默认我们得到Qt::DisplayRole对应的QVariant,其他角色如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
【讨论】:
这正是我需要的小费,谢谢!我在使用 SDK 和在线文档时遇到了麻烦。我有一种感觉,我可能也错过了其他重要的事情。你能推荐一个解释 Qt MVC 的所有重要机制的参考吗? (在线或死树格式) qt-project.org/doc/qt-4.8/model-view-programming.html或qt-project.org/doc/qt-5.0/qtcore/…作为班级入口以上是关于QT 模型/视图编程:我应该如何检索上下文菜单选项的额外数据?的主要内容,如果未能解决你的问题,请参考以下文章