Ich möchte jedem QTableWidgetItem, das in die Tabelle eingefügt wurde, zusätzliche Daten zuordnen, um diese Daten zukünftig zu verwenden, wenn auf ein Tabellenelement geklickt wird. Aber diese Daten sollten nicht sichtbar sein. Wie kann ich das machen?Qt - Wie verknüpfe ich Daten mit QTableWidgetItem?
Antwort
Sie können QTableWidgetItem::setData()
wie so verwenden:
setData(Qt::UserRole, myData); // set
Wo myData
ist ein unterstütztes QVariant Typ. Sie können QTableWidgetItem::data()
verwenden, um den Wert abzurufen, den Sie speichern.
Wenn Sie mehrere benötigen, können Sie Qt::UserRole
+ 1, +2 usw. verwenden (Qt::UserRole
ist "Die erste Rolle, die für anwendungsspezifische Zwecke verwendet werden kann."), Können Sie mehr über die anderen Typen lesen der Rollen here).
Wenn Sie einen benutzerdefinierten Typ speichern, der nicht standardmäßig von QVariant unterstützt wird, müssen Sie Ihren Typ beim Qt-Metaobjektsystem registrieren. Sehen Sie sich QMetaType für weitere Details an.
Wenn Sie eine ganze Zahl speichern, zum Beispiel wollte:
QTableWidgetItem* widgetItem = tableWidget->item(row, col); // get the item at row, col
int myInteger = 42;
widgetItem->setData(Qt::UserRole, myInteger);
// ...
myInteger = widgetItem->data(Qt::UserRole);
Sie könnten von QTableItem ableiten und Ihre eigenen Daten Mitglied zur Verfügung stellen, oder Sie können die QTableView mit Ihrem eigenen Modell verwenden.
Aus meiner Erfahrung ist dies viel flexibler als setData Daten Qt Funktionen – drahnr
Ja, aber Richards Antwort ist wahrscheinlich einfacher für einen Anfänger - oder wenn Sie nur versuchen, einige MFC-Code zu übersetzen –
Dies ist eine meiner größten Beschwerden gegen Qt. Ich habe in den wenigen Monaten, in denen ich es verwende, noch einen einfachen Mechanismus gefunden, der analog zur Datenbindung in .NET ist. –
Alle Qt-Anzeigeklassen (Bäume, Tabellen, Listen) basieren auf Model/View. Es ist einfach, das Backend-Modell nach Belieben zu erstellen. Es gibt nicht den One-Click-Link zu SQL, den Sie mit LINQ haben, aber es ist flexibler. –
@Martin Ich nenne es "machbar", nicht "einfach" ... obwohl ich denke, es ist besser, als die Daten direkt an die Präsentation gebunden zu haben. –