QT模型/视图编程:我应该如何检索上下文菜单选项的额外数据?

时间:2014-03-05 21:13:04

标签: python qt view model pyside

我刚刚开始编程QT,需要整合一个小工具,在树视图中显示数据,并允许在文本字段中编辑相关数据。要在树视图中显示的层次结构由不同的对象类型组成,我需要根据所选对象的类型启用/禁用菜单中的不同选项。启用/禁用菜单选项的信息不应该是树视图中显示信息的一部分,所以我使用data()

中的字段打折

有没有办法扩展QAbstractItemModel所以我可以整齐地检索我需要的信息?或者我是否完全误解了这个概念,并且在显示菜单时需要以某种方式直接访问所选对象?

1 个答案:

答案 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
}