大家好日子,
多年来一直在编写代码,但在PyQt方面仍然有点绿色, 所以请原谅我在语法上缺乏的问题; - )
我正在攻击(着名的?)打包示例的衍生物 附带PyQt4(和Qt),即“basicsortfiltermodel.pyw” 来自PyQt4中的“../examples/itemviews”......
我添加了一个可以启动的小弹出菜单(让我们称之为B.py) 来自BasicSort衍生物(让我们称之为A.py)。
我相信我正在纠正添加新数据(新记录) QSortFilterProxyModel()。 (我想这是因为我没有得到 现在任何错误,经过一些努力)但我似乎无法得到 QTreeView刷新。我已经搜索过Qt类文档了 谷歌出了问题(似乎是一个常见的问题 它的外观,哈哈)..
现在我知道这是一个丑陋的黑客,但只是为了让它发挥作用 (以后的优雅可以来自我的理论)...... 在A.py的底部,我宣布了一个全局“wX”,
global wX;
[...]
window = Window()
wX = Window()
window.setSourceModel(createMailModel(window))
因此,当我稍后按下按钮时,我可以更容易地抓住 在运行时“createMailModel”中找到的“父”值。 从中我得到了“模型”处理..
model = QtGui.QStandardItemModel(0, 17, WinX)
addMail(model, "image",
"tabl00",
etc
etc)
无论如何,......我认为这是有效的...... 但是在通过addMail()添加新记录之后,我似乎无法得到 self.proxyModel刷新自己..
我很确定这是一个愚蠢的新手问题,哈哈......但是任何人都可以 帮助阐明如何使这项工作?
非常感谢,
答案 0 :(得分:3)
我相信您必须在原始模型中添加新项目而不是代理模型。添加项目后,代理模型和视图将相应地更新自身。看看下面的示例是否适合您:
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()
希望这有帮助,尊重