首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >刷新QTreeView / QSortFilterProxyModel

刷新QTreeView / QSortFilterProxyModel
EN

Stack Overflow用户
提问于 2010-11-19 03:35:43
回答 1查看 2.7K关注 0票数 2

祝大家日安!

我已经写了很多年的代码,但是当涉及到PyQt时还是有点生疏,所以请原谅我在语法上缺乏问题;-)

我正在破解一个派生的(有名的?)PyQt4 (和Qt)附带的打包示例,即PyQt4中"../examples/itemviews“中的"basicsortfiltermodel.pyw”...

我已经添加了一个小的弹出式菜单(让我们称之为B.py),用户可以从BasicSort派生(让我们称之为A.py)启动它。

我相信我正在更正将新数据(新记录)添加到QSortFilterProxyModel()。(我之所以这么想,是因为经过一些努力,我现在没有收到任何错误),但是我似乎无法刷新QTreeView。我已经搜索了Qt类文档,并用Google把它搜索出来(从它的外观上看,这似乎是一个常见的问题,哈哈)。

现在我知道这是一个丑陋的技巧,但只是想让它正常工作(我的理论是优雅可以稍后出现)……在A.py的底部,我声明了一个全局"wX",

代码语言:javascript
复制
global wX;

[...]
window = Window()
wX = Window()
window.setSourceModel(createMailModel(window))

这样,当我稍后点击一个按钮时,我可以更容易地获得在运行时"createMailModel“中找到的"parent”值。从中我得到了"model“句柄..

代码语言:javascript
复制
    model = QtGui.QStandardItemModel(0, 17, WinX)

    addMail(model, "image",
                           "tabl00",
                            etc
                            etc)

不管怎样,..I认为这是有效的..。但是在通过addMail()添加了一个新记录之后,我似乎无法让self.proxyModel刷新它自己。

我很确定这是一个愚蠢的新手问题,lol....but,有人能帮我解释一下如何让它工作吗?

非常感谢,

EN

回答 1

Stack Overflow用户

发布于 2010-11-20 23:23:42

我相信你必须在你的原始模型中添加新的项目,而不是代理模型。一旦添加了项目,代理模型和视图将相应地更新自身。看看下面的例子是否适合你:

代码语言:javascript
复制
import sys
from PyQt4 import QtGui

class MainForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainForm, self).__init__(parent)

        self.setMinimumSize(300, 400)

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

        parentItem = self.model.invisibleRootItem()
        parentItem.appendRow(QtGui.QStandardItem("3"))
        parentItem.appendRow(QtGui.QStandardItem("1"))
        parentItem.appendRow(QtGui.QStandardItem("4"))
        parentItem.appendRow(QtGui.QStandardItem("2"))

        self.view = QtGui.QListView(self)
        self.view.setModel(self.sortModel)
        self.view.setGeometry(0, 0, 200, 400) 

        self.button = QtGui.QPushButton("add items", self)
        self.button.move(200, 0)
        self.button.clicked.connect(self.on_button_clicked)

        self.layout = QtGui.QVBoxLayout(self.centralWidget())        
        self.layout.addWidget(self.view)
        self.layout.addWidget(self.button)

        self.sortModel.sort(0)

    def on_button_clicked(self):
        parentItem = self.model.invisibleRootItem()
        parentItem.appendRow(QtGui.QStandardItem("222"))
        parentItem.appendRow(QtGui.QStandardItem("333"))
        parentItem.appendRow(QtGui.QStandardItem("444"))

def main():
    app = QtGui.QApplication(sys.argv)
    form = MainForm()
    form.show()
    app.exec_()

if __name__ == '__main__':
    main()

希望这能有所帮助,致敬

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4218778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档