Qt - QTableView - bouton cliquable dans la ligne de table
-
08-10-2019 - |
Question
Je besoin d'un bouton / lien dans une ligne de tableau d'un QTableView
. Ceci est d'ouvrir une boîte de dialogue pour permettre cette ligne à modifier de manière plus efficace.
Après des heures de recherche sur le web, je suis encore à trouver un exemple décent.
Je suis conscient que cela est susceptible d'être fait en utilisant un QItemDelegate
, mais je ne suis pas sûr comment avoir un widget fonctionnel dans la ligne sans forcer l'élément en mode d'édition en premier.
Toute aide serait grandement appréciée.
La solution
Vous pourriez émuler la fonctionnalité d'un lien en soulignant le texte cliquable, la capture puis le clic de la cellule via le signal cellClicked (ligne, colonne) et vérifier que le col == editColumn. Ensuite, la ligne correspondrait à quel élément vous modifiez.
Par exemple,
Nom des données | Valeur 1 | Valeur 2 | Modifier
connect (tableWidget, SIGNAL(cellClicked(int,int)), this, SLOT(editSlot(int, int)));
...
void ClassName::editSlot(int row, int col){
if (col == 3) {
doWork(row);
}
}
Autres conseils
Vous pouvez utiliser setIndexWidget
pour cela, consultez la documentation Qt plus d'informations.
A titre d'exemple, pour incorporer un bouton-poussoir dans la première colonne de la deuxième rangée (code non testé):
tableView->setIndexWidget(tableView->model()->index(2, 1), new QPushButton);