【问题标题】:Qt C++ - Displaying data in one view from multiple SQLite tablesQt C++ - 在一个视图中显示来自多个 SQLite 表的数据
【发布时间】:2017-10-13 17:29:18
【问题描述】:

Qt 版本: 5.8

假设我有以下 SQL 表

-- People
person_id | first_name | last_name | age

-- Cars, person_id is a foreign key to show that this person owns this car
car_id | car_year | car_make | car_model | person_id

假设我想用这样的数据混合填充以下 Table ViewTable Widget

// Table that the user sees. Notice that not all the information from the tables is shown.
first_name | last_name | car_year | car_make | car_model

最好/推荐的方法是什么?我可以看到以下两种方式,但我觉得这两种方式都不是最好的方式

  1. 使用表格小部件,这是一个基于项目的表格视图,具有默认模型。为此,我猜我需要制作 QSqlQuery 来从我的 QSqlDatabase 获取数据,然后以这种方式填充表格小部件。
  2. 使用 Table View,这需要我为视图的数据模型创建自己的 QSqlTableModel。根据 QSqlTableModel 的文档,它是一个用于从单个表中读取和写入数据库记录的高级接口。这意味着我需要两个 QSqlTableModel,一个用于上面的每个表。但是,表格视图只能使用一个模型,并且它将显示来自该模型的所有数据。我认为唯一可行的方法是将表格组合成一个表格,其中仅包含我希望用户看到的信息。我觉得那会很丑陋但可能。在这种情况下,我是否应该一共有三个表 - 上面的两个加上组合的一个供用户查看?

我觉得 #1 比这两个更好,但我想知道是否还有比这两个更好的方法。

【问题讨论】:

标签: c++ qt sqlite qtsql


【解决方案1】:

如果person_id 是表people 的主键,您可以使用QtSql.QsqlRelationalTableModelQtWidgets.QTableView 中显示来自多个表的数据,这里是您的示例:

QSqlRelationalTableModel rm = new QSqlRelationalTableModel(parentObject, database);
rm→setTable(„cars“);
rm→setRelation(4, QSqlRelation(„people“, „person_id“, „first_name, last_name“);
rm→select();
QTableView tv = new QTableView();
tv→setModel(rm);
tv→hideColumn(0);           # hide column car_id
hh = tv->horizontalHeader();
hh→moveSection(4, 0);       # change order of columns
hh→moveSection(5, 1);

【讨论】:

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