2017-05-15 60 views
0

的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

回答

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); 
相關問題