Qt的C++ - 从多个SQLite的表一个视图中显示的数据
问题描述:
的Qt版本: 5.8Qt的C++ - 从多个SQLite的表一个视图中显示的数据
比方说,我有以下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
什么是最好的/推荐的方式来做到这一点?我可以看到以下两种方式,但我觉得也不是这样做
- 使用表构件,这是一个默认的模型基于物品的表视图的最佳途径。要做到这一点,我猜我需要让QSqlQuery s从我的QSqlDatabase中获取数据,并且只需填充表格控件即可。
- 使用表视图,这将需要我为视图的数据模型创建我自己的QSqlTableModel。根据QSqlTableModel的文档,它是一个高级接口,用于读取和写入单个表中的数据库记录。这意味着我需要两个QSqlTableModels,一个用于我上面的每个表。但是,Table View只能使用一个模型,并且会显示来自该模型的所有数据。我认为这样做的唯一方法就是将这些表格合并成一张表格,只显示我希望用户看到的信息。我觉得这很丑陋,但可能。在这种情况下,我应该总共有三张表 - 上面两张加上用户看到的两张表?
我觉得#1是这两个的更好,但我不知道是否有仍然比这两个更好的办法。
答
如果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);
的可能的复制[如何显示在一个QTableView中多QSqlTableModels的内容?](http://stackoverflow.com/questions/17156286/how-to-display-content-of-multiple-qsqltablemodels-in-one-qtableview) – MrEricSir