J'essaie de garder certaines données de tableau synchronisées avec le contenu d'un QTableWidget. Je voudrais activer le réenregistrement par glisser-déposer (déplacement d'éléments dans la table, par opposition à la copie), mais je ne sais pas comment, lorsque l'événement drop est déclenché, je peux savoir de quel index l'élément a été tiré. Par conséquent, je n'ai aucun moyen de savoir quel objet se déplacer dans la liste avec laquelle je me synchronise. Comment puis-je obtenir l'index de la ligne d'origine de l'élément en train d'être déplacé?Lorsque vous faites glisser une ligne dans un QTableWidget, comment puis-je savoir quel index de ligne a été déplacé FROM et TO?
Répondre
Coder l'index à partir de QMimeData et le stocker dans l'objet QDrag avec setMimeData(). Lorsque l'événement drop se produit, extrayez les données de QDropEvent avec mimeData().
QDropEvent
a une fonction source()
qui vous donnera le widget qui a démarré l'événement glisser-déposer. Ensuite, faites un qobject_cast<QTableWidget>
sur le source
. Une fois que vous avez vérifié le pointeur, appelez QTableWidget::findItems
pour obtenir la ligne de l'élément.
donc quelque chose comme ceci:
void dropEvent (QDropEvent * event) {
if (event) {
QTableWidget* table = qobject_cast<QTableWidget*>(event->source());
if (table) {
QString item = ""// Decode MIME data here.
Qt::MatchFlag someFlag = Qt::MatchExactly; // Check documentation for match type.
QList<QTableWidgetItem *> items = table->findItems(item, someFlag)
// If you don't have repeats, items[0] is what you want.
int initialRow = table->row(items[0]);
}
}
}
J'ai tendance à utiliser des classes modèle/vue donc cela pourrait être un peu loin, mais il devrait fonctionner.
Étape 1. Remplacez la fonction QTableWidget :: mimeData. Appelez l'implémentation de la classe de base, puis placez votre propre type MIME personnalisé dans QMimeData et renvoyez-le.
Étape 2. Remplacez la fonction QTableWidget :: dropEvent. Si vos données MIME se trouvent dans QMimeData, acceptez la suppression et extrayez vos données. Utilisez le QTableWidget :: indexAt pour trouver dans quelle ligne/colonne le drop est entré.
- 1. Comment glisser et déposer une ligne dans un JTable?
- 2. Tri QTableWidget orginal index
- 3. Comment savoir quel itinéraire a été sélectionné?
- 4. Que se passe-t-il lorsque vous faites glisser l'écran?
- 5. Existe-t-il un moyen de savoir sur quelle ligne une exception a été lancée?
- 6. Quel index de ligne a une case à cocher de modèle dans une grille de données?
- 7. Javascript Faites glisser et déposez
- 8. C# Faites glisser et déposez la fonctionnalité
- 9. NullReferenceException lorsque vous faites InsertOnSubmit dans LINQ to SQL
- 10. Faites glisser et déposez sur Flex AdvancedDataGrid
- 11. ScrollView ne défile pas lorsque vous faites glisser les boutons
- 12. Comment faire glisser une ligne ListView dans .NET?
- 13. DragMove ne fonctionne pas lorsque vous faites glisser rapidement?
- 14. Flex/Flash: Ne pas afficher le curseur 'barre' lorsque vous faites glisser un objet TextField/TextArea?
- 15. Draggable imbriqué à l'intérieur Draggable fait glisser les deux lorsque vous faites glisser l'enfant dans IE
- 16. Comment savoir si une ligne n'existe pas?
- 17. Faites glisser et déposer dans winapi
- 18. Comment savoir quel compilateur a été utilisé: g77 ou gfortran
- 19. faites glisser et déposez dans un dialogue
- 20. Commande par glisser-déposer flexible d'un contrôle HorizontalList - Recherche d'index FROM et TO?
- 21. Comment conserver la trace de l'index de ligne lorsque JTable a été trié par l'utilisateur?
- 22. Dojo: faites glisser et déposez Arrêter Faites glisser
- 23. Comment faire glisser le curseur jQuery uniquement lorsque vous faites glisser les gestionnaires?
- 24. Cocoa: Faites glisser et déposez n'importe quel type de fichier
- 25. Lorsque vous utilisez l'équilibrage de charge Oracle et ADO.NET, comment savez-vous sur quel hôte la commande a été exécutée?
- 26. Comment savoir si une variable dans ASP a été déclarée
- 27. Obtenez le chemin du fichier lorsque vous faites glisser un fichier de finder à un webview?
- 28. MouseUpEvent arrête de fonctionner pendant que vous faites glisser MovieClip
- 29. MySQL: savoir à quelle date une ligne a été ajoutée à une table?
- 30. Trouver des éléments dans une liste de scala et également savoir quel prédicat a été satisfait