Hello,
Je suis débutant avec QT et je rencontre un petit soucis sur un de mes projet.
En effet sur ma fenêtre principale, j'ai une scroll area avec plusieurs line edit dedans. chacun représente un chemin vers des dossier que l'utilisateur doit choisir. J'aimerai implémenté un glisser déposé pour faire en sorte que quand l'utilisateur fait glisser un dossier ou un fichier, le chemin vers le dossier soit renseigné dans le line edit sous le curseur de ça souris.
pour ce faire j'ai implémenté les méthode dragEnterEvent et dropEvent. Cependant, je rencontre un soucis:
quand ma sourie passe sur un des line edit et que je lâche le fichier tout ce passe bien. cependant si ma souris passe ,par exemple, au dessus du line edit 1, 2 et 3 avant d'arriver au 4 et que je lâche le fichier au-dessus du 4 alors le 1,2,3 et 4 vont remplir leurs champ.
C'est un comportement que je ne comprends pas très bien étant donné quand j'ai fais en sorte de dropper seulement dans le line edit qui ce trouve sous ma sourie.
voici le code:
je pense que je ne comprend pas très bien le principe d'event. d'auttent plus que quand je rajoute un dragLeavEnvent avec un print console comme ça:
Code : 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
21
22
23
24 void MainWindow::dragEnterEvent(QDragEnterEvent *e) { e->accept() } void MainWindow::dropEvent(QDropEvent *e) { foreach (const QUrl &url, e->mimeData()->urls()) { QString fileName = StringManagement::getDir(url.toLocalFile()); if(ui->lineEdit->underMouse()) ui->lineEdit->setText(fileName); if(ui->lineEdit_2->underMouse()) ui->lineEdit_2->setText(fileName); if(ui->lineEdit_5->underMouse()) ui->lineEdit_5->setText(fileName); if(ui->lineEdit_9->underMouse()) ui->lineEdit_9->setText(fileName); if(ui->lineEdit_10->underMouse()) ui->lineEdit_10->setText(fileName); if(ui->lineEdit_11->underMouse()) ui->lineEdit_11->setText(fileName); } }
si je place ma souris au dessus d'un line edit et que j'y reste, je reçois les deux messages.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void MainWindow::dragEnterEvent(QDragEnterEvent *e) { qInfo() << "ici"; e->accept(); } void MainWindow::dragLeaveEvent(QDragLeaveEvent *e){ qInfo() << "la"; e->accept(); }
je vous remercie par avance pour vôtres aide.
Partager