Bonjour,

sur mon interface graphique créée dans QtDesigner, j'ai deux QListWidget.
Je voudrais pouvoir faire un drag and drop du QListWidget 1 vers le QListWidet 2 (autorisé dans ce sens seulement).
J'ai besoin:
- De capturer l'évènement "Drop" sur le QListWidget 2 afin de vérifier si l'élément y est déjà présent (et dans ce cas ne pas l'ajouter pour ne pas avoir de doublons)
- De capturer l'évènement "KeyPressEvent" sur le QListWidget 2 afin de supprimer l'élement sélectionné si l'utilisateur appuie sur "Suppr" (mon QListWidget est configuré sur 'Single selection').

D'après mes recherches sur le net j'ai compris qu'il fallait créer une classe custom dérivant de QListWidget, j'ai donc créé une classe "QlistWidgetCustom" dont le code est le suivant:

Code qListWidgetCustom.h : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class QListWidgetCustom : public QListWidget
{
	Q_OBJECT
 
public:
	explicit QListWidgetCustom(QWidget *parent);
	~QListWidgetCustom();
 
protected:
	void dragEnterEvent(QDragEnterEvent *event);
	void keyPressEvent(QKeyEvent * event);
 
signals:
	void checkDuplicatesRequired(QString sObjectName);
};

Code qListWidgetCustom.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "qListWidgetMqlat.h"
 
QListWidgetCustom::QListWidgetCustom(QWidget *parent) : QListWidget(parent)
{
	this->setAcceptDrops(true);
}
 
QListWidgetCustom::~QListWidgetCustom() {}
 
void QListWidgetCustom::dropEvent(QDropEvent *event)
{
	emit checkDuplicatesRequired(this->objectName());
	event->acceptProposedAction();
}
 
void QListWidgetCustom::keyPressEvent(QKeyEvent * event)
{
	if (event->key() == Qt::Key_Delete)
		this->takeItem(this->currentRow());
}

J'émet un signal vers la QMainWindow qui se charge alors de vérifier les doublons.

Sous QtDesigner, j'ai fait un clic droit sur mon QListWidget 2 puis "promouvoir en..." et j'ai ajouté la classe promue ci-dessus en précisant le nom du fichier *.h dans laquelle elle est décrite.

Je pensais que ça allait fonctionner avec ça, mais lorsque je démarre mon programme, le drop est impossible (le symbole de sens interdit s'affiche). Par contre le keyPressEvent fonctionne bien.
J'ai vu qu'il fallait éventuellement réimplémenter aussi les fonctions dragEnterEvent et dragMoveEvent, ce que j'ai fait en mettant pour seul code dans ces fonctions "event->acceptProposedAction();", mais cela ne fonctionne pas mieux.


Quelqu'un voit il ce qui ne va pas dans mon code?
Merci d'avance pour votre aide.