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 

什么是最好的/推荐的方式来做到这一点?我可以看到以下两种方式,但我觉得也不是这样做

  1. 使用表构件,这是一个默认的模型基于物品的表视图的最佳途径。要做到这一点,我猜我需要让QSqlQuery s从我的QSqlDatabase中获取数据,并且只需填充表格控件即可。
  2. 使用表视图,这将需要我为视图的数据模型创建我自己的QSqlTableModel。根据QSqlTableModel的文档,它是一个高级接口,用于读取和写入单个表中的数据库记录。这意味着我需要两个QSqlTableModels,一个用于我上面的每个表。但是,Table View只能使用一个模型,并且会显示来自该模型的所有数据。我认为这样做的唯一方法就是将这些表格合并成一张表格,只显示我希望用户看到的信息。我觉得这很丑陋,但可能。在这种情况下,我应该总共有三张表 - 上面两张加上用户看到的两张表?

我觉得#1是这两个的更好,但我不知道是否有仍然比这两个更好的办法。

+0

的可能的复制[如何显示在一个QTableView中多QSqlTableModels的内容?](http://stackoverflow.com/questions/17156286/how-to-display-content-of-multiple-qsqltablemodels-in-one-qtableview) – MrEricSir

如果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);