2010-12-10 21 views
20

Necesito la capacidad de tener un botón/enlace dentro de una fila de la tabla de QTableView. Esto es para abrir un diálogo para permitir que la fila se edite de manera más eficiente.Qt - QTableView - Botón que hace clic en la fila de la tabla

Después de horas buscando en la web, todavía no he encontrado un buen ejemplo.

Soy consciente de que esto es probable que se realice utilizando un QItemDelegate, pero no estoy seguro cómo tener un widget funcional dentro de la fila sin forzar el elemento en el modo de edición en primer lugar.

Cualquier ayuda sería muy apreciada.

+0

¿Qué quieres decir con "botón en fila de la tabla"? Toda la fila? ¿O en una sola celda? –

Respuesta

1

Se podría emular la funcionalidad de un enlace subrayando el texto puede hacer clic, a continuación, la captura de la Haga clic en la celda a través de la señal cellcle (row, col) y verifique que col == editColumn. Entonces la fila correspondería a qué elemento está editando.

Por ejemplo,

Nombre de datos | Valor 1 | Valor 2 | Edición

connect (tableWidget, SIGNAL(cellClicked(int,int)), this, SLOT(editSlot(int, int))); 

... 

void ClassName::editSlot(int row, int col){ 
    if (col == 3) { 
    doWork(row); 
    } 
} 
+0

¿Por qué la respuesta aceptada invariablemente no responde realmente la pregunta? Definir una nueva conexión de ranura de señal simplemente para agregar un único botón o enlace estático a un elemento de la tabla en el momento de definición de la tabla no tiene sentido. Honestamente, StackOverflow simplemente debe establecer de manera predeterminada la respuesta dinámica que actualmente recibe la mayor cantidad de votos positivos como "aceptada". –

20

Puede usar setIndexWidget para eso, consulte el Qt documentation para obtener más información.

A modo de ejemplo, para incrustar un botón pulsador en la primera columna de la segunda fila (código no probado):

tableView->setIndexWidget(tableView->model()->index(2, 1), new QPushButton); 
+1

He leído que en grandes conjuntos de datos, la configuración de un widget de nivel de fila puede provocar una pérdida notable de rendimiento. – cweston

Cuestiones relacionadas