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 :
- class TablePlaylistItem: public QTableWidgetItem
- {
- public:
- TablePlaylistItem(const QString& s): QTableWidgetItem(s) {}
- protected:
- virtual QMimeData* mimeData( const QModelIndexList &indexes ) const {std::cout<<"plop"<<std::endl; return NULL;}
- };
- class TablePlaylist: public QTableWidget
- {
- public:
- TablePlaylist(QWidget *parent = 0);
- protected:
- virtual void dropEvent(QDropEvent *event);
- virtual void dragEnterEvent(QDragEnterEvent *event);
- virtual QMimeData* mimeData( const QModelIndexList &indexes ) const {std::cout<<"mime"<<std::endl; return NULL;}
- };
- void TablePlaylist::dragEnterEvent(QDragEnterEvent *event)
- {
- QStringList liste(event->mimeData()->formats());
- for (QStringList::iterator it = liste.begin(); it != liste.end(); it++)
- {
- if (*it == "itemTablePlaylist" || *it == "itemArbreCollection" )
- {
- event->setAccepted(true);
- update();
- return;
- }
- }
- event->setAccepted(false);
- update();
- }
- class Fenetre : public QMainWindow, public Ui_MainWindow
- {
- Q_OBJECT
- ...
- TablePlaylist *tablePlaylist;
- ...
- }
- void Fenetre::preparerTablePlaylist()
- {
- tablePlaylist = new TablePlaylist(framePlaylist);
- ...
- gridLayout_2->addWidget(tablePlaylist, 0, 0, -1, -1);
- }
- void Fenetre::ajouterMorceau(const InfoMorceau& m)
- {
- QTableWidgetItem *item;
- ...
- item = new TablePlaylistItem(QString::fromStdString(m.fichier));
- tablePlaylist->setItem(ligne, COLONNE_TITRE, item);
- ...
- }
|
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