2009-11-21 4 views
2

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

3

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().

0

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.

1

É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é.

Questions connexes