2017-11-14 1 views
0

Ich speichere Dienstnamen außerhalb der Tabelle services. So services Tabelle enthält alles, was ich in einem TableView brauche, außer dass ich Service-Namen in service_types in der Ansicht gespeichert anzeigen möchte.
Soweit ich verstanden habe, gibt es keine Möglichkeit, QSqlTableModel arbeiten mit sogar einer einfachsten Join.Eine einfache Möglichkeit, IDs für Zeichenfolgen in einer Ansicht zu ersetzen

Ich weiß, ich sollte QAbstractTableModel übernehmen, aber ich habe keine Ahnung, wie man dort etwas implementiert. Ein Zauberer in Qt Creator hat ein .h/.cpp Paar für mich gemacht, aber ich kann keine Beispiele im Internet finden, um eine Idee zu bekommen, was ich implementieren soll.

Also frage ich, ob es eine clevere Möglichkeit gibt, alle Service-Typen-Strings (es gibt nur 200) in eine QMap im Voraus zu bekommen, und tableView sie nur anstelle von IDs anzeigen.

+0

vielleicht kann ich QSqlTableModel selbst erben, und nur machen 'data()' Methode anders verhalten (für 1 Spalte)? – mekkanizer

+0

Qt Dokumentation ist ziemlich vollständig. Unter http://doc.qt.io/qt-5/model-viewing-programming.html#model-classes finden Sie eine Erklärung, wie es funktioniert und http://doc.qt.io/qt-5/examples- itemviews.html für Beispiele. –

+0

Sie müssen Ihr Modell unterklassifizieren und in der Funktion 'data()' die ursprünglichen Daten durch eins ersetzen, das Sie von einer anderen Tabelle abfragen. – vahancho

Antwort

1

Wie ich in meinem Kommentar gesagt habe, können Sie Ihr QSqlTableModel Modell unterklassifizieren und in der data() Funktion die ursprünglichen Daten durch eins ersetzen, das Sie von einer anderen Tabelle abfragen. ZB:

QVariant MyTableModel::data(const QModelIndex &index, int role) const 
{ 
    if (index.column() == 0 /*first column*/ && role == Qt::DisplayRole) 
    { 
    // Query data from another table (service_types) and as you get the right 
    // type for the given row, return it. 
    return type_I_got_from_service_type_table; 
    } 
    return QSqlTableModel::data(index, role); 
} 
Verwandte Themen