【问题标题】:how to update QListView when using it with QSqlQueryModel?与 QSqlQueryModel 一起使用时如何更新 QListView?
【发布时间】:2021-03-20 17:39:13
【问题描述】:

我正在从 QSqlQuery 模型实例化一个 QListView,但是当添加一个新项目时,它会将其添加到数据库中但不会将其添加到视图中,这是我的代码

class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.setGeometry(900,180,800,600)
        self.setWindowTitle("Media Display")
        self.setWindowIcon(QIcon('favicon.png'))
        self.model = QSqlQueryModel()
        self.model.setQuery("SELECT path FROM fichiers")
        
        self.listview = QListView()
        self.listview.setModel(self.model)
        self.listview.setModelColumn(1)



    def addImage(self):
        fichier_base, _ = QFileDialog.getOpenFileName(self, 'select video', QDir.homePath(),"Images (*.png *.xpm *.jpg *.jpeg)")


            query = QSqlQuery()
            query.exec(
                f"""INSERT INTO fichiers (path) VALUES ('{fichier_base}')"""
            )
            print('paaath', fichier_base)
            self.model.layoutChanged.emit()

        

【问题讨论】:

    标签: python qt pyqt pyqt5 pyside


    【解决方案1】:

    首先不要使用 f-string 来创建查询,因为您的代码容易受到 SQL 注入的影响,而是使用占位符。另一方面,QSqlQueryModel 是一个读取模型,在建立查询时会重置,因此可能的解决方案是重新建立查询:

    def addImage(self):
        fichier_base, _ = QFileDialog.getOpenFileName(
            self, "select video", QDir.homePath(), "Images (*.png *.xpm *.jpg *.jpeg)"
        )
        if not fichier_base:
            return
        query = QSqlQuery()
        query.prepare("""INSERT INTO fichiers (path) VALUES (?)""")
        query.addBindValue(fichier_base)
        if query.exec_():
            last_query = self.model.query().executedQuery()
            self.model.setQuery("")
            self.model.setQuery(last_query)
        else:
            print(query.lastError().text())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多