Glisser-déposer entre deux QTableWidget
Bonjour,
je dispose de 2 QTableWidgets, tableIN et tableOUT.
Pour l'instant, j'arrive sans problème à déplacer des lignes d'une table à l'autre par deux QPushButtons [->] et [<-] : Copie des lignes dans la table cible, reclassement et resélection dans la table cible, destruction dans la table source.
Le problème est que j'aimerais faire cela par Drag on Drop. Pour cela il faudrait que j'en comprenne le mécanisme. Je parcours des docs mais sans pouvoir synthétiser les étapes -et pire-, ni les automatismes. Autorisation, visualisation au niveau du curseur et pour l'action quels sont les éléments à surcharger si nécessaire ?
Le code minimum semble être
Code:
1 2 3 4 5 6
| ui->tableIN->setDragEnabled(true);
ui->tableIN->setAcceptDrops(true);
ui->tableIN->setDropIndicatorShown(true);
ui->tableOUT->setDragEnabled(true);
ui->tableOUT->setAcceptDrops(true);
ui->tableOUT->setDropIndicatorShown(true); |
Il "autorise" le DnD entre les 2 tables. Mais le Drop laisse à désirer : il copie ce qui est sélectionné dans l'autre table, si l'équivalent du nombre de lignes sélectionnées dans la source est déjà créé dans la destination : autrement dit, si je veux déplacer 3 lignes d'un coup, il faut que 3 lignes vides existent dans la cible... tt si on effectue le lâcher exactement sur la première ligne vide. Je ne comprends pas bien ce genre de positionnement : Ou par défaut on propose un mécanisme fonctionnel, ou on ne propose rien.
- Il me manque quoi pour que cela fonctionne ? Des lignes de paramétrage comme celles de dessus ? Peu probable mais on ne sait jamais... Noël approche.
- Ou faut-il intervenir à la main ? C'est probable, mais dans ce cas, où neutralise-t-on le comportement par défaut (la création de lignes dans la cible, la pseudo-copie ? ) et où incorpore-t-on le sien (la création des lignes nécessaires, leur incorporation, le tri, leur sélection dans la table cible bref le code de mon QPushButton) ? Avec un peu de chance au même endroit :aie:
Merci.