我有一个基于模型的QTreeView,它由qsortfilterproxy模型提供。在
我在这里显示数据库中的行。通过双击,我正在执行一个模态QDialog来编辑数据(用户可以执行CRUD操作,比如在SQLite数据库中创建新行、更新、删除等)。在
关闭编辑对话框后,焦点将返回到底层QTreeView。
现在我想刷新数据库中更改的数据。
一种方法是建立完整的模型并重新提取所有行,但是用户选择的单元格消失了,速度非常慢,而且TreeView闪烁(因为我对宽度做了一些列调整)
在QSortFilterProxyModel上发出dataChanged信号似乎可以。。。没有什么。在
我是否可以告诉我的模型刷新或更新数据,而不必再次获取所有行?在
完整的工作代码示例:import sys
from PyQt5 import QtWidgets, QtCore, QtGui
import sqlite3
import re
def _human_key(key):
key = key.lower()
key = key.replace("ä", "ae").replace("ö", "oe").replace("ü", "ue").replace("ß", "ss")
parts = re.split(r'(\d*\.\d+|\d+)', key, re.IGNORECASE)
return parts
class HumanProxyModel(QtCore.QSortFilterProxyModel):
def lessThan(self, source_left, source_right):
data_left = source_left.data()
data_right = source_right.data()
if type(data_left) == type(data_right) == str:
return _human_key(data_left) < _human_key(data_right)
return super(HumanProxyModel, self).lessThan(source_left, source_right)
class winMain(QtWidgets.QMainWindow):
COL_ID, COL_NAME = range(