Я хочу связать дополнительные данные с каждым элементом QTableWidgetItem, вставленным в таблицу, чтобы использовать эти данные в будущем, когда нажимается на элемент таблицы. Но эти данные не должны быть видны. Как я могу это сделать?Qt - Как связать данные с QTableWidgetItem?
ответ
Вы можете использовать QTableWidgetItem::setData()
так:
setData(Qt::UserRole, myData); // set
Где myData
является поддерживаемый QVariant типа. Вы можете использовать QTableWidgetItem::data()
для получения значения, которое вы храните.
Если вам нужно больше одного, вы можете использовать Qt::UserRole
+ 1, + 2 и т. Д. (Qt::UserRole
«Первая роль, которую можно использовать для конкретных приложений». Вы можете узнать больше о других типах ролей here).
Если вы сохраняете нестандартный тип, который не поддерживается QVariant, вам необходимо зарегистрировать свой тип с помощью метаобъектной системы Qt. Посмотрите на QMetaType для получения более подробной информации.
Если вы хотите сохранить целое, например:
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);
Вы могли бы извлечь из QTableItem и предоставить свой собственный элемент данных, или вы могли бы использовать QTableView с вашей собственной модели.
По моему опыту это намного более гибко, чем setData data Функции Qt – drahnr
Да, но ответ Ричард, вероятно, проще для новичков - или если вы просто пытаетесь перевести некоторый код MFC –
Это одна из моих самых больших жалоб на Qt. Я еще не нашел, за несколько месяцев, которые я использовал, простой механизм, аналогичный привязке данных в .NET. –
Все классы отображения элементов Qt (деревья, таблицы, списки) основаны на модели/представлении, легко сделать бэкэнд-модель чем угодно. В LINQ нет одной ссылки на SQL, но она более гибкая. –
@Martin Я называю это «выполнимым», а не «легким» ... хотя, я думаю, это лучше, чем данные, привязанные непосредственно к презентации. –