Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2254 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Qt Drag & Drop [Résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Qt Drag & Drop [Résolu]

n°2117082
ptitchep
Posté le 18-12-2011 à 13:29:23  profilanswer
 

Bonjour,
 
J'essaie d'implémenter le drag and drop entre un QTreeWidget et un QTableWidget ou à l'intérieur du QTableWidget.
Pour l'instant, je tente juste à l'intérieur du QTableWidget.
J'imagine qu'un détail m'échappe car mes méthodes ne sont pas appelées.
 

Code :
  1. class TablePlaylistItem: public QTableWidgetItem
  2. {
  3. public:
  4. TablePlaylistItem(const QString& s): QTableWidgetItem(s) {}
  5. protected:
  6. virtual QMimeData* mimeData( const QModelIndexList &indexes ) const {std::cout<<"plop"<<std::endl; return NULL;}
  7. };
  8. class TablePlaylist: public QTableWidget
  9. {
  10. public:
  11. TablePlaylist(QWidget *parent = 0);
  12. protected:
  13. virtual void dropEvent(QDropEvent *event);
  14. virtual void dragEnterEvent(QDragEnterEvent *event);
  15. virtual QMimeData* mimeData( const QModelIndexList &indexes ) const {std::cout<<"mime"<<std::endl; return NULL;}
  16. };
  17. void TablePlaylist::dragEnterEvent(QDragEnterEvent *event)
  18. {
  19. QStringList liste(event->mimeData()->formats());
  20. for (QStringList::iterator it = liste.begin(); it != liste.end(); it++)
  21. {
  22.  if (*it == "itemTablePlaylist" || *it == "itemArbreCollection" )
  23.  {
  24.   event->setAccepted(true);
  25.   update();
  26.   return;
  27.  }
  28. }
  29. event->setAccepted(false);
  30. update();
  31. }
  32. class Fenetre : public QMainWindow, public Ui_MainWindow
  33. {
  34. Q_OBJECT
  35. ...
  36. TablePlaylist *tablePlaylist;
  37. ...
  38. }
  39. void Fenetre::preparerTablePlaylist()
  40. {
  41. tablePlaylist = new TablePlaylist(framePlaylist);
  42. ...
  43. gridLayout_2->addWidget(tablePlaylist, 0, 0, -1, -1);
  44. }
  45. void Fenetre::ajouterMorceau(const InfoMorceau& m)
  46. {
  47. QTableWidgetItem *item;
  48. ...
  49. item = new TablePlaylistItem(QString::fromStdString(m.fichier));
  50. tablePlaylist->setItem(ligne, COLONNE_TITRE, item);
  51. ...
  52. }


 
Les méthodes dropEvent et dragEnterEvent de TablePlaylist sont appelées quand je fais du drag and drop. Je peux accepter ou non.
Par contre les fonctions mimeData ne le sont jamais quelle que soit la classe (j'ai essayé d'en mettre partout juste pour trouver la bonne). Du coup dans mon dragEnterEvent, j'ai event->mimeData() qui contient des choses bizarres (enfin par défaut je pense).
Comment faire pour surcharger correctement mimeData et ainsi envoyer les informations que je souhaite?
 
Merci


Message édité par ptitchep le 18-12-2011 à 18:03:01

---------------
deluser --remove-home ptitchep
mood
Publicité
Posté le 18-12-2011 à 13:29:23  profilanswer
 

n°2117094
GrosBocdel
Posté le 18-12-2011 à 15:02:28  profilanswer
 

est-ce que setAcceptDrops(true); ?
 
En plus si mimeData() retourne NULL et que tu fais event->mimeData()->formats() ça doit poser problème
 


Message édité par GrosBocdel le 18-12-2011 à 15:04:46
n°2117096
ptitchep
Posté le 18-12-2011 à 15:21:26  profilanswer
 

Oui j'ai accepté les drops (du moins pour la classe TablePlaylist).
Ma méthode retourne NULL parce qu'elle est vite faite. Le problème, c'est qu'elle n'est jamais appelée. Donc bon, la valeur de retour... :-/
(J'en ai une prête pour le jour où j'arrive à la faire appeler mais son code n'a pas grand intérêt ici)


---------------
deluser --remove-home ptitchep
n°2117102
GrosBocdel
Posté le 18-12-2011 à 16:01:42  profilanswer
 

Le prototype de ton mimeData n'a pas l'air d'être le bon d'après la doc de la 4.8, pour QTableWidget
 
 QMimeData  * mimeData ( const QList <QTableWidgetItem *>items ...) const [virtual protected]


Message édité par GrosBocdel le 18-12-2011 à 16:04:16
n°2117117
ptitchep
Posté le 18-12-2011 à 18:02:21  profilanswer
 

Merci.
La méthode est appelée. J'ai du récupérer le prototype dans un vieux tuto sans doute.
Et je l'ai relu une bonne cinquantaine de fois sans rien voir...
Encore merci, je n'ai plus qu'à me mettre au boulot pour le reste.


---------------
deluser --remove-home ptitchep

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Qt Drag & Drop [Résolu]

 

Sujets relatifs
[Qt] texte avec des zones cliquables [résolu]Qt 4.7.4 : Aide complémentaire création serveur de jeu
[Qt][Windows] Installation des modules QtMobilityPython + Qt + OpenCV = problème :/
[Resolu][Qt] maximiser la taille d'une icone sur un boutonDebugger Qt
[Qt] Modifier la taille d'une image[Lazarus]drag and drop vers une autre application
[Qt] Utilisation de telnet dans une application 
Plus de sujets relatifs à : Qt Drag & Drop [Résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR