繁体   English   中英

在 QTreeView 中恢复用户的选择和展开的项目

Restore the User's Selection and Expanded Items in QTreeView

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

当用户单击重新创建 model 的刷新按钮时,如何存储然后恢复展开的项目。 我想递归地存储用户选择和所有展开的项目,然后填充 model,最后恢复展开的项目和选定的项目。

我已经能够弄清楚如何恢复选择,但是我不确定如何存储/恢复展开的项目。 这可以使用qstandardItemModel's match功能来完成吗?

是否可以改进所选项目的恢复,以便每次在 select 项目时都不会触发选择更改。 我想一次 select 。

在此处输入图像描述

from PySide import QtGui, QtCore 


class Main(QtGui.QWidget):

    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.resize(300,500)

        self.button = QtGui.QPushButton('Refresh')

        self.model = QtGui.QStandardItemModel()
        self.proxy = QtGui.QSortFilterProxyModel()
        self.proxy.setSourceModel(self.model)

        self.treeview = QtGui.QTreeView()
        self.treeview.setModel(self.proxy)
        self.treeview.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
        self.treeview.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)

        self.selectionModel = self.treeview.selectionModel()

        self.layout = QtGui.QVBoxLayout()
        self.layout.addWidget(self.button)
        self.layout.addWidget(self.treeview)
        self.setLayout(self.layout)

        self.button.clicked.connect(self.populate)

        # begin
        self.populate()
        self.treeview.expandAll()


    def fill_model_from_json(self, parent, d):
        if isinstance(d, dict):
            for k, v in d.items():
                child = QtGui.QStandardItem(str(k)) 
                parent.appendRow(child)
                self.fill_model_from_json(child, v)
        elif isinstance(d, list):
            for v in d:
                self.fill_model_from_json(parent, v)
        else:
            parent.appendRow(QtGui.QStandardItem(str(d)))


    def populate(self):
        # Store User Selection
        names = [x.data() for x in self.selectionModel.selectedRows()]
        self.selectionModel.clearSelection()

        # Store Expanded Items

        # Populate
        self.model.clear()
        self.model.setHorizontalHeaderLabels(['Name'])

        items = {
            'Pasta': {
                'Spaghetti': {
                    'Thick': {},
                    'Thin': {}
                },
                'Ravioli': {
                    'Mushroom': {},
                    'Plain': {},
                },
            },
            'Cookies': {
                'Chocolate': {
                    'Dark Chocolate': {},
                    'Milk Chocolate': {}
                },
                'Misc': {
                    'M&M\'s': {},
                    'Snickerdoodle': {},
                },
            },
            'Hummus': {
                'Plain': {},
                'Spicy': {},
                'Mild': {}
            }
        }
        self.fill_model_from_json(self.model.invisibleRootItem(), items)

        # Restore User Selection
        indexes = []
        for x in names:
            results = self.model.match(self.model.index(0, 0), QtCore.Qt.DisplayRole, x, -1, QtCore.Qt.MatchRecursive)
            indexes.extend(results)

        for x in indexes:
            idx = self.proxy.mapFromSource(x)
            self.selectionModel.select(idx, QtGui.QItemSelectionModel.Select |  QtGui.QItemSelectionModel.Rows)

        # Restore Expanded Items


if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    w = Main()
    w.show()
    sys.exit(app.exec_())
问题暂未有回复.您可以查看右边的相关问题.
2 还原用户在ClearCase中的更改

我们使用ClearCase作为控制版本系统。 在我们的系统中,有时由于时间限制,我们发布的版本中没有一些开发人员提交。 例如,我在六个类中进行了一些更改,但另一个用户也对所有或某些类进行了更改。 而且我必须提交代码而不更改他。 因此,我使用以前的版本扫描文件,以便可以还原他的更改 ...

4 UITableView:如何还原用户输入

我有一个包含几个项目的UITableView,并且在UITableView列表的底部添加了一个显示“ No More Items”的单元格。 我阻止对“ NMI”单元格进行重新排序,但是我仍然可以将其他项之一拖到“ NMI”单元格下面。 当我的视图告诉我:tableView:moveRo ...

5 在 RabbitMQ 上恢复用户“guest”

我意外地从 RabbitMQ web 经理中删除了用户“访客”,而没有留下任何其他管理员帐户。 现在我无法再登录 web 管理器了。 删除 RabbitMQ 安装文件夹并重新安装没有帮助。 当我尝试通过命令添加用户时,错误消息如下所示: 我已经确定 RabbitMQ 服务正在运行: RabbitM ...

6 如何始终在QTreeView中展开项目?

我自己使用ComboBox和QTreeView(用于投标列表)创建了一个完成者。 我的树模型数据结构是父子关系。 使用上面的构造函数,将数据放入模型后,孩子被隐藏了,只能看到父母。 为了查看所有项(子项m_view->expandAll() 在将数据放入模型后,我必须使用m_v ...

7 如何在Drupal 7中还原用户的先前数据

嗨,我在drupal 7中工作,当用户更新配置文件时,我需要调用.Net服务,该服务将更新另一个数据库表字段。如果更新正确完成,则返回True ,否则返回False 。 现在,我在此函数中调用此服务 现在的问题是,如果该服务向我返回false,那么我该如何将drupal用户数据还原为他 ...

8 使用QFileSystemModel展开QTreeView中的项目

用户单击按钮时,我需要转到某个目录。 用户在QInputDialog中输入路径(例如,Linux上的/ mnt / data / Music),然后程序转到该目录,例如Midnight Commander中的Mc或Ranger中的cd,但是我不知道该怎么做...我早已熟识所有文档 m ...

9 Mongo无法还原用户密码

我有以下情况: 转储Mongo数据库(cmd mongodump) 从一位管理员用户更改密码 还原Mongo数据库(cmd mongorestore) 编辑: 我对数据库转储使用以下命令: 结果密码未恢复。 在此特定情况下,mongodb中是否可 ...

10 如何在C#中的另一个文件中备份/还原用户设置

我编写了一个使用标准ConfigurationManager机制将其设置存储到.user文件的程序。 现在,我想实现一种“另存为”和“加载”的方法,用户可以将其程序设置存储到另一个位置。 除了复制物理文件,还有其他可能性吗? ...

2012-03-29 09:00:57 1 2403   c#/ .net
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM