Qt如何跨表呈现和编辑数据

Posted

技术标签:

【中文标题】Qt如何跨表呈现和编辑数据【英文标题】:Qt how to present and edit data across tables 【发布时间】:2011-04-26 11:20:28 【问题描述】:

请耐心等待,因为这是一个稍微主观的问题,但我在了解可能是常见情况的最佳实践。

我将数据拆分为多个 (sqlite) 表,我使用 Qt 来操作这些表。 (sql)视图是显示来自多个表的数据的一种方式,但我也希望能够更新值。 让我们举一个三表的例子,使用房子。 这三个表通过外键链接,例如 Area 表、House 表和 Furniture 表。有一个与外键相关的 1:many 关系:Area:House, House:Furniture 我想让一个带有区域的 UI 项目填充一个房屋 UI 项目,该项目又填充一个家具 UI 项目。通过 UI 项,我的意思是类似于可编辑列表,或一系列 lineEdits/Spinners(取决于值类型),任何东西。

为了澄清一点,我了解如何使用 qsqlrelationaltablemodel 和 qsqlrelationdelegate。当我更新单个表时,这些工作正常,但不会更新从多个表上的连接创建的(sql)视图。 我正在寻找一种解决方案,可以让我有效地处理来自多个表的数据,包括更新值。

我应该对三个模型执行此操作,更新每个模型的过滤器,并使用链接到每个模型的视图吗? 或者也许我可以将所有内容都插入到单个树模型中? 还是我应该考虑创建自定义模型,或者只是不使用模型/视图并手动填充 UI?

不久前,我曾尝试在同一个数据库上使用多个模型作为实验,但它们并没有像我希望的那样表现得那么好。这是我询问最佳实践的主要原因。

非常感谢您提供的任何建议。

【问题讨论】:

您的模型看起来不错,典型的关系模型 - 但您是在问如何根据另一个表的 ID 更新一个表? 你研究过 QSqlRelationalTableModel 吗?我不确定您所说的一个表 UI 填充另一个表填充另一个表是什么意思。也许您可以在示例中详细说明?在您的视图中的关系模型和委托之间,可能会为您提供所需的内容。但同样,这是我认为你所说的猜测基础。 嗨。 @M.R 不,我知道如何根据另一个人的 id 更新表。 @真正的账单,谢谢,但我了解 qsqlrelationaltablemodel。我将把问题编辑得更清楚一些。抱歉所有的混乱 那么,您能再解释一下您的问题吗?因为根据我的经验,单独更新所有表(在事务中)会带来更好的数据完整性、更好的维护等。 【参考方案1】:

我想我的问题没有说的那么清楚;那是因为我真的不知道要问的正确问题。 我一直在寻找一种方法,通过不同的 UI 项来表示来自多个表的数据,这种方法不一定直接映射到 tableview。

到目前为止,我的解决方案是使用单独的模型,手动从数据库中填充。我手动进行的任何所需值的编辑。

到目前为止似乎工作正常。 我学到的一个方便的技巧是将额外的数据放在不同的角色 Qt::UserRole 中。这是我可以将相关的 UUID(我的数据库键都是 UUID)与单列树视图中的数据一起存储,并使用这些来获得相当直接的数据库访问。额外的数据显然可以放在 Qt::UserRole+n 中,虽然我还没有尝试过。

【讨论】:

以上是关于Qt如何跨表呈现和编辑数据的主要内容,如果未能解决你的问题,请参考以下文章

跨表的 MS Access 年龄计算

如何编辑和呈现存储为字符串的内部 html?

如何在 Python Qt 中获取和设置 monaco 编辑器的值?

如何以编程方式停止在 Qt 中编辑 QTreeWidget?

如何在qt中更改textcolor编辑器

在编辑任何输入时呈现数据表单列表?