2017-05-15 3 views
0

Qt-Version: 5.8Qt C++ - Anzeigen von Daten in einer Ansicht von mehreren SQLite Tabellen

Sagen wir, ich habe folgende SQL-Tabellen

-- 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 

Lasst uns sagen, dass ich die folgende auffüllen möchten Tabellenansicht oder Tabelle Widget mit einer Mischung aus diesen Daten wie folgt

// 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 

Was ist der beste/empfohlene Weg, dies zu tun? Ich kann die folgenden zwei Möglichkeiten sehen, aber ich fühle mich weder sind der beste Weg, diese

  1. Verwenden Sie ein Tabelle Widget, die ein Element Basis zu tun Tabellenansicht mit einem Standardmodell. Um dies zu tun, würde ich wahrscheinlich QSqlQuery s machen, um die Daten von meinem QSqlDatabase zu bekommen und einfach das Table Widget auf diese Weise zu füllen.
  2. Verwenden Sie eine Tabellenansicht, für die ich mein eigenes QSqlTableModel für das Datenmodell der Ansicht erstellen müsste. Laut der Dokumentation für QSqlTableModel handelt es sich um eine High-Level-Schnittstelle zum Lesen und Schreiben von Datenbankdatensätzen aus einer einzelnen Tabelle. Dies bedeutet, dass ich zwei QSqlTableModels benötigen würde, eins für jede meiner obigen Tabellen. Die Tabellenansicht kann jedoch nur ein Modell verwenden und zeigt alle Daten dieses Modells an. Ich denke, der einzige Weg, wie dies funktionieren würde, ist, die Tabellen in einer Tabelle mit nur den Informationen zu kombinieren, die der Benutzer sehen soll. Ich denke, das wäre sehr hässlich, aber möglich. Sollte ich in diesem Fall insgesamt drei Tabellen haben - die beiden oben genannten und die kombinierten, die die Benutzer sehen können?

Ich fühle mich wie # 1 desto besser der beiden letztgenannten ist, aber ich frage mich, ob es noch einen besseren Weg, als diese beiden.

+0

Mögliches Duplikat von [Wie in einer QTableView Inhalt mehrerer QSqlTableModels anzuzeigen ?] (http://stackoverflow.com/questions/17156286/how-to-display-content-of-multiple-qsqltablemodels-in-one-qtableview) – MrEricSir

Antwort

0

Wenn person_id ist Primärschlüssel der Tabelle people Sie QtSql.QsqlRelationalTableModel verwenden können Daten aus mehreren Tabellen in einem QtWidgets.QTableView zu zeigen, hier Ihr Beispiel:

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); 
Verwandte Themen