python导入数据库的数据怎么在qt界面里刷新_pyqt5:在数据库上更改数据后正确更新QTreeView...

本文展示了一个使用PyQt5构建的QTreeView应用程序,该程序从SQLite数据库中加载数据,并允许用户通过双击编辑数据。当在数据库中进行修改后,问题是如何在不重新加载整个模型的情况下刷新QTreeView。目前尝试了QSortFilterProxyModel的数据Changed信号,但效果不佳。寻求一种能有效刷新数据的方法,同时保持用户的选择和界面流畅。
摘要由CSDN通过智能技术生成

我有一个基于模型的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(

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QDomDocument.setContent()是Qt中的一个函数,用于将XML字符串解析为QDomDocument对象。它的作用是将XML字符串转换为QDomDocument对象,以便于对XML文档进行操作和处理。该函数的参数是一个QString类型的XML字符串,返回值为bool类型,表示解析是否成功。如果解析成功,则返回true,否则返回false。 ### 回答2: QDomDocument::setContent是Qt中的一个方法,用于将XML文档加载到QDomDocument对象中。 QDomDocument是Qt提供的用于操作XML文档的类,可以读取和修改XML文档的内容。setContent方法是其中的一个重要方法,用于将XML文档的内容加载到QDomDocument对象中进行解析和操作。 setContent方法接受一个XML文档的内容作为参数,可以是QString、QByteArray或QIODevice对象。它会根据传入的内容解析XML文档,并将解析后的结果保存在QDomDocument对象中,以便后续的处理。 在调用setContent方法后,可以通过QDomDocument提供的API来访问和修改XML文档的内容,例如获取节点、添加节点、修改节点的属性等等。 需要注意的是,setContent方法会根据解析的结果返回一个布尔值,表示解析是否成功。如果解析成功,返回true;如果解析失败,返回false。所以在使用setContent方法后,需要检查解析的结果,并根据返回值进行相应的处理。 总之,QDomDocument::setContent方法是Qt中用于加载XML文档的重要方法,通过它可以将XML文档的内容解析并保存在QDomDocument对象中,方便后续对XML文档进行访问和修改。 ### 回答3: QDomDocument.setContent() 是一个用于将 XML 数据加载到 QDomDocument 对象的方法。它接受一个参数,即要加载的 XML 数据。 使用 QDomDocument.setContent() 方法时,可以将一个包含 XML 数据的字符串传递给它。方法会为该对象创建一个文档树,根据提供的 XML 数据构建该树。 以下是使用 QDomDocument.setContent() 方法的示例代码: ```cpp QString xmlData = "<root>" "<element1>Value 1</element1>" "<element2>Value 2</element2>" "</root>"; QDomDocument doc; if(doc.setContent(xmlData)) { // XML 数据加载成功 // 遍历文档树、提取数据等操作 } else { // XML 数据加载失败 // 处理错误或异常情况 } ``` 在上述示例中,我们创建了一个包含 XML 数据的字符串 xmlData,并将其传递给 QDomDocument.setContent() 方法。该方法会将该字符串解析为一个 QDomDocument 对象中的文档树。 如果加载成功,可以对 QDomDocument 对象进行遍历操作,提取所需的数据。如果加载失败,可能是由于 XML 数据格式错误或其他原因,可以在 else 语句块中处理相应的错误或异常情况。 总结来说,QDomDocument.setContent() 方法用于将 XML 数据加载到 QDomDocument 对象中,使我们能够方便地对 XML 数据进行处理和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值