2010-04-05 8 views
6

Quiero asociar datos adicionales con cada QTableWidgetItem insertado en la tabla, para utilizar esos datos en el futuro, cuando se hace clic en un elemento de la tabla. Pero esa información no debería ser visible. ¿Cómo puedo hacer eso?Qt - ¿Cómo asociar datos con QTableWidgetItem?

+1

Esta es una de mis mayores quejas contra Qt. Todavía tengo que encontrar, en los pocos meses que he estado usando, un mecanismo simple análogo al enlace de datos en .NET. –

+0

Todas las clases de visualización de elementos de Qt (árboles, tablas, listas) se basan en el modelo/vista, es fácil hacer que el modelo de fondo sea lo que quiera. No hay un solo clic en el enlace SQL que tiene con LINQ, pero es más flexible. –

+1

@Martin Lo llamo "factible", no "fácil" ... aunque supongo que es mejor que tener los datos vinculados directamente a la presentación. –

Respuesta

20

Puede utilizar QTableWidgetItem::setData() así:

setData(Qt::UserRole, myData); // set 

Dónde myData es un tipo apoyado QVariant. Puede usar QTableWidgetItem::data() para recuperar el valor que almacena.

Si necesita más de una puede utilizar Qt::UserRole + 1, + 2, y así sucesivamente (Qt::UserRole es "el primer papel que se puede utilizar para fines específicos de la aplicación.", Se puede leer más acerca de los otros tipos de roles here).

Si está almacenando un tipo personalizado que QVariant no admite de forma nativa, deberá registrar su tipo con el sistema metaobjetivo Qt. Mira QMetaType para más detalles sobre eso.

Si desea almacenar un número entero, por ejemplo:

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); 
+1

¡Mejor respuesta! –

+0

¿Cómo puedo asociar un entero al elemento de la tabla con la función setData()? ¿Debo hacer lo siguiente: item.setData (Qt :: UserRole, myInteger)? – Narek

+0

Cambié el ejemplo para ser más claro, espero que ayude. – richardwb

5

Usted podría derivar de QTableItem y proporcionar su propio miembro de datos, o puede utilizar la QTableView con su propio modelo.

+1

Desde mi experiencia esto es mucho más flexible que los datos de setData Funciones de Qt – drahnr

+1

Sí, pero la respuesta de richard es probablemente más fácil para un principiante, o si solo está tratando de traducir algún código MFC –

Cuestiones relacionadas