gpt4 book ai didi

python - Qt:从一个 QSqlTableModel 在两个 QListView 之间移动条目

转载 作者:太空宇宙 更新时间:2023-11-04 12:54:54 24 4
gpt4 key购买 nike

我的 Sqlite 数据库看起来像这样(简化):

CREATE TABLE Scene(
sceneID INTEGER PRIMARY KEY,
title TEXT NOT NULL
);
CREATE TABLE Character(
characterID INTEGER PRIMARY KEY,
fullName TEXT NOT NULL
);
CREATE TABLE CharacterInScene(
characterID INTEGER,
sceneID INTEGER,
PRIMARY KEY(characterID, sceneID),
FOREIGN KEY(characterID) REFERENCES Character(characterID),
FOREIGN KEY(sceneID) REFERENCES Scene(sceneID)
);
INSERT INTO Scene (1, "Police Station");
INSERT INTO Character (1, "Harrison Ford");
INSERT INTO Character (2, "Rutger Hauer");
INSERT INTO CharacterInScene(1, 1);

因此,我只有一个场景“警察局”,其中包含哈里森·福特,但不包含鲁特格·豪尔。在我的用户界面中,我正在编辑那个场景的内容。并有一个像这样的界面:

UI

现在,这是两个连接到两个 QSqlQueryModel 的 QListView,查询如下:

1. SELECT * FROM Character WHERE characterID NOT IN
(SELECT characterID FROM CharacterInScene WHERE sceneID=1)
2. SELECT * FROM Character WHERE characterID IN
(SELECT characterID FROM CharacterInScene WHERE sceneID=1)

我希望箭头按钮将所选条目从一个列表移动到另一个列表,并使用应用按钮执行数据库中的更改。但是由于 QSqlQueryModel 的只读特性,这并不是我现在设置的那样。

实现此目标的最佳方法是什么?我想我会想要实现我自己的 QSqlTableModel,但我不确定如何实现,而且我还没有找到任何与我的情况相似的好例子。也许我想多了。

我正在使用 PyQt5,但我可以从 C++ 进行翻译。

最佳答案

您不必实现任何自定义模型或使 QSqlQueryModel 可编辑、插入和删除记录。您可以使用 QSqlQuery 完成此任务并调用模型的更新。

def addToScene(self):
for ix in self.notInScene.listView.selectionModel().selectedIndexes():
id = self.notInScene.model.record(ix.row()).value("characterID")
query = QSqlQuery()
query.prepare("INSERT INTO CharacterInScene VALUES (:characterID, :sceneID);")
query.bindValue(":characterID", id)
query.bindValue(":sceneID", self.sceneId)
if not query.exec_():
print(query.lastError().text())

self.updateList() # update the model

def removeFromScene(self):
for ix in self.inScene.listView.selectionModel().selectedIndexes():
id = self.inScene.model.record(ix.row()).value("characterID")
query = QSqlQuery()
query.prepare("DELETE FROM CharacterInScene WHERE characterID = :characterID AND sceneID = :sceneID;")
query.bindValue(":characterID", id)
query.bindValue(":sceneID", self.sceneId)
if not query.exec_():
print(query.lastError().text())
self.updateList() # update the model

完整的例子可以在下面的link中找到

关于python - Qt:从一个 QSqlTableModel 在两个 QListView 之间移动条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47024950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com