IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Problème de Drag and Drop

  1. #1
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut Problème de Drag and Drop
    Bon je me mets au Drag and Drop et j'ai un petit problème au niveau de ma fonction de vérification du type MIME. J'utilise l'image png en piece jointe pour mes testes. Mon problème est au niveau de la fonction event->mimeData()->hasImage() qui me renvoie toujours false.

    Voici le code :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #include <QtGui>
    #include <QtGui/QApplication>
    #include <QtGui/QLabel>
     
    class DragImg : public QWidget
    {
    	Q_OBJECT
     
    private:
    	QLabel* m_labelImage;
     
    public:
    	DragImg()
    	{
    		this->m_labelImage = new QLabel(this);
    		this->m_labelImage->setFixedSize(320,240);
    		this->m_labelImage->setAcceptDrops(true);
    		this->m_labelImage->setScaledContents(true);
    	}
     
    protected :
    	 void dragEnterEvent(QDragEnterEvent *event)
    	 {	
                    //La verification de l'objet dragger ne fonctionne pas.
    		if(event->mimeData()->hasImage())
    		{
                       //Problème ne passe jamais ici
                      event->acceptProposedAction();
                    }
     
    	 }
    	 void dropEvent(QDropEvent *event)
    	 {
    		QList<QUrl> urls = event->mimeData()->urls();
    		if (urls.isEmpty())
    			return;
     
    		QString fileName = urls.first().toLocalFile();
    		if (fileName.isEmpty())
    			return;
    		this->m_labelImage->setPixmap(QPixmap(fileName)); 
    	 }
     
    };
     
    #include "main.moc"
     
    int main(int argc, char *argv[])
    {
    	QApplication a(argc, argv);
    	DragImg	w;
    	w.show();
    	return a.exec();
    }
    Images attachées Images attachées  
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 106
    Points : 74
    Points
    74
    Par défaut
    Bonjour essaye de composée ton code en 2 fichiers un main.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <QtGui/QApplication>
    #include "DragImg.h"
    #include "main.moc"
     
    int main(int argc, char *argv[]){
    	QApplication a(argc, argv);
    	DragImg::DragImg w;
    	w.show();
    	return a.exec();
    }
    et un fichier DragImg.h
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #ifndef DRAGIMG_H_INCLUDED
    #define DRAGIMG_H_INCLUDED
     
    #include <QtGui/QLabel>
    #include <QDragMoveEvent>
    #include <QtCore/QUrl>
     
    class DragImg : public QWidget{
    	Q_OBJECT
     
    private:
    	QLabel* m_labelImage;
     
    public:
    	DragImg(){
    		this->m_labelImage = new QLabel(this);
    		this->m_labelImage->setFixedSize(320,240);
    		this->m_labelImage->setAcceptDrops(true);
    		this->m_labelImage->setScaledContents(true);
    	}
    	~DragImg(){ return;}
     
    protected :
    	 void dragEnterEvent(QDragEnterEvent *event){
                    // La verification de l'objet dragger ne fonctionne pas.
    		if(event->mimeData()->hasImage()){
                       // Problème ne passe jamais ici
                      event->acceptProposedAction();
                    }
     
    	 }
     
    	 void dropEvent(QDropEvent *event){
    		QList<QUrl> urls = event->mimeData()->urls();
    		if (urls.isEmpty())
    			return;
     
    		QString fileName = urls.first().toLocalFile();
    		if (fileName.isEmpty())
    			return;
    		this->m_labelImage->setPixmap(QPixmap(fileName));
    	 }
     };
     
     
    #endif // DRAGIMG_H_INCLUDED
    Tu as oublier de rajouter dans ton fichier header l'entete include :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <QDragMoveEvent>
    pour eviter l'erreur avec
    if(event->mimeData()->hasImage()){
    et l autre entete pour eviter l'erreur avec
    QUrl> urls = event->mimeData()->urls()
    Et n'oublie pas d'executer :
    .../../.>moc -o main.moc DragImg.h
    pour que ça compile

  3. #3
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Merci quand meme aliwatte mais j'ai resolu le problème. Sinon je sais bien qu'il vaut mieux mettre le code dans 2 fichiers séparés mais pour le forum c'est plus simple. De plus le code compile parfaitement comme ça.

    Merci quand meme du coup de main.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par superjaja Voir le message
    Merci quand meme aliwatte mais j'ai resolu le problème.
    C'était quoi le problème alors?
    Pour info, lorsque l'on fait
    ca include toute les entête du module GUI (en DuCOre il me semble) donc pas besoin des autres include.

    aliwatte > c'est plus simple pour aider de n'avoir qu'un seule fichier source et surtout si l'on peut le compiler
    Pour le moc, si tu utilise qmake (ou autre générateur de makefile), tu n'as pas besoin de t'en occuper. C'est automatique

  5. #5
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Attention si en plus j'ai l'approbation de mon parrain.

    Et je confirme uniquement avec ce code cela fonctionne :
    C'est toujours bon à savoir car cela permet de ne pas s'embêter déclarer a chaque fois les includes.

    Pour Yan:
    Le problème c'est que je voulais faire un glisser déposer d'une image se trouvant sur mon bureau Windows dans un label Qt. En fait il faut utiliser la fonction hasUrls() et non hasImage(). Après je vérifie que c'est une extension d'un fichier de type image et voilà c'est OK ça marche. Je posterai de toute façon bientôt le code pour faire un exemple de Drag And Drop pour la FAQ.

    Maintenant je voudrais faire l'inverse prendre l'image de mon viewer et la mettre sur le bureau ou autre part dans Windows. Comme ça j'ai pas trop d'idée, je ne sais pas trop comment faire. Mais je cherche.

    PS: Si quelqu'un a une idée je suis preneur.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec Drag and Drop WPF
    Par Moh1267 dans le forum C#
    Réponses: 2
    Dernier message: 04/06/2014, 11h35
  2. Problème de Drag and drop
    Par triblekano dans le forum Interfaces Graphiques en Java
    Réponses: 0
    Dernier message: 26/12/2010, 17h57
  3. Problème de drag and drop
    Par te-san dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 30/08/2010, 10h28
  4. Problème de Drag and Drop
    Par totodof dans le forum Windows Presentation Foundation
    Réponses: 18
    Dernier message: 13/04/2010, 07h54
  5. problème avec drag and drop
    Par Nayra dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 16/04/2009, 00h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo