2017-02-21 5 views
0

In einem QTableView versuche ich, einige Metadaten für jede Zeile hinzuzufügen. Eine naheliegende Lösung wäre, die Qt::UserRole in der letzten Spalte zu verwenden. Etwas wie das.QTableview Zeile Metadaten

QStandardItemModel* model = new QStandardItemModel(); 
QStandardItem* item = new QStandardItem(); 
item->setData("Hello", Qt::DisplayRole); 
item->setData(rowMetadata, Qt::UserRole); 
model->setItem(ROW_0, COL_0, item); 
// Getting the metadata as follows 
model->data(model->index(ROW_0, COL_0), Qt::UserRole); 

Etwas fühlt sich aber falsch an. Noch intuitivere Lösungen?

Antwort

0

Eine Möglichkeit ist die Unterklasse QAbstractItemModel und erstellen Sie Ihr eigenes internes Modell und dann können Sie Metadaten speichern, wie Sie möchten. Wenn QStandardItemModel ansonsten gut für Sie funktioniert, dann könnte dies mehr Arbeit sein, als nur mit dem, was Sie bereits tun, zu bleiben.

Die andere Möglichkeit, die ich denken kann, ist, Ihre vorhandene QStandardItemModel und eine QSortFilterProxyModel zu verwenden. Im Basismodell können Sie Ihre Metadaten als zusätzliche Spalten speichern und dann im Proxy sicherstellen, dass diese Spalten immer in der Ansicht verborgen sind.

+0

Danke! Die zweite Lösung ist, was ich habe. Aber es ist gut, sich der "sauberen" Art bewusst zu sein. –