Qt C ++ - 在多个SQLite表

时间:2017-05-15 02:40:35

标签: c++ qt sqlite qtsql

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 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. 使用表格视图,这需要我为视图的数据模型创建自己的 QSqlTableModel 。根据QSqlTableModel的文档,它是一个高级接口,用于从单个表读取和写入数据库记录。这意味着我需要两个QSqlTableModel,一个用于上面的每个表。但是,表视图只能使用一个模型,它将显示该模型的所有数据。我认为这种方法的唯一方法是将表组合成一个表,只包含我希望用户看到的信息。我觉得那会非常难看,但可能。在这种情况下,我应该总共有三个表 - 上面的两个加上用户可以看到的组合表吗?
  3. 我觉得#1 比这两个更好,但我想知道是否还有比这两种更好的方法。

1 个答案:

答案 0 :(得分:0)

如果person_id是表格people的主键,您可以使用QtSql.QsqlRelationalTableModel来显示QtWidgets.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);