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

Qt Discussion :

List d'élément, coloration, menu et drag & drop


Sujet :

Qt

  1. #1
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut List d'élément, coloration, menu et drag & drop
    Bonjour,

    ( Et oui, c'est encore moi )

    Aujourd'hui je voudrai faire une chose que je n'ai pas encore vu, que je ne sais si c'est possible et que je ne sais pas faire ( sinon je serai déjà dans le code ).

    Je veux une sorte de QListWidget ( je ne sais pas si c'est le bon pour faire ça ), qui accepte le drag & drop ( en partant de l'explorateur, pour y déposer des fichiers ).
    Mais, je veux que les objets qui sont dans ce QListWidget, puisse avoir une couleur à coté de leurs noms ( comme dans cette exemple: http://qt.developpez.com/doc/latest/...ews-chart.html ) mais je suis loin d'avoir compris comment ils font, et surtout que cela ne semble pas rentré dans mon QListWidget.
    Et finalement, je veux que lorsque je clique sur le bouton droit de ma souris, sur un des éléments, qu'un menu apparaisse. Alors sur ce dernier point, je n'ai aucune idée pour le faire. De plus il faudrai que je sache sur quel élément l'utilisateur a cliqué, et puis comment faire un menu dans le vide O_o. ( Peut être, juste en faisant un QMenu, sans parent, à la position du clique ).

    Donc, première interrogation, est ce un bon choix, le QListWidget?

    Note: J'ai déjà le drag & drop qui marche

    Comment faire le système de couleur?
    Et comment faire le menu d'après vous?

    Merci pour votre aide,

    LittleWhite
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Salut,
    QListView (ou QListWIdget tous depend comment tu l'utilise) semble une bonne solution à ton problème.

    Dans l'exemple, il utilise une décoration avec un texte. En gros, c'est ce à quoi correspond role dans les fonctions data et setdata
    http://qt.developpez.com/doc/latest/...mDataRole-enum

    Si tu veux plus de customization, tu peut créer un delegate. Voici un peu de doc
    http://qt.developpez.com/doc/latest/...ogramming.html

    Pour le context menu, je pense que tu peut te débrouiller avec :
    http://qt.developpez.com/doc/latest/...ntextMenuEvent
    http://qt.developpez.com/doc/latest/...w.html#indexAt

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Merci encore une fois pour ce lot d'information ... y a plus qu'a
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Re bonjour.

    Avec les indications de Yan, j'ai réussi à faire ce que je voulais.
    La fonctions setData n'est pas explicite de par son nom ( pour un QListWidgetItem() ) mais elle permet de lui définir la decoration. La décoration peut être une couleure unie devant le nom de l'entrée du QListWidget.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    QListWidgetItem* item = new QListWidgetItem("Nom stupide", listWidget);
    			item->setData(Qt::DecorationRole, QColour(255,0,0)); // ici ça met la couleur :)
    listWidget->addItem(item);
    Maintenant les menu.

    Alors il faut surchager la fonction virtuelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void contextMenuEvent(QContextMenuEvent *event);
    (Pour moi, dans ma classe héritant de QListWidget)

    Dedans:
    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
     
    void ListCurves :: contextMenuEvent(QContextMenuEvent *event)
    {
    	QModelIndex mi;
     
    	mi = this->indexAt(QPoint(event->x(), event->y()));
     
    	if (  mi.row() != -1 )
    	{
    		clickIndex = mi.row();
     
    		QMenu menu(this);
        	    	menu.addAction(pChangeCurveColourAction);
        	    	menu.exec(event->globalPos());
    	}
    	clickIndex = -1;
    	//}
    }
    [EDIT]

    J'oubliais, il faut dire à Qt que vous voulez un menu utilisant sa fonction virtuelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this->setContextMenuPolicy(Qt::DefaultContextMenu);
    Un code d'exemple peut être trouvé dans les examples de Qt
    Section: Main Windows
    l'exemple s'appelant Menus
    [/EDIT]

    Voilà tout. Merci encore Yan.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Alors il faut surchager la fonction virtuelle
    Pour info normalement, tu devrais pouvoir éviter l'héritage par un eventFilter

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Citation Envoyé par yan Voir le message
    Pour info normalement, tu devrais pouvoir éviter l'héritage par un eventFilter
    Je ne comprends pas ce que vous voulez dire.
    Éviter l'héritage de la fonction contextMenuEvent().
    Et comment fonctionne l'eventFiltrer et quels sont les avantages?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Et comment fonctionne l'eventFiltrer et quels sont les avantages?
    En gros tous les events passent par la fonction event du QObject avant d'être dispatché dans les fonctions correspondante.
    On peut alors ajouter un filtre sur ces events pour les stopper ou faire des traitements en conséquence
    http://qt.developpez.com/doc/latest/...ml#eventFilter

    l'avantage:
    • évite de faire un héritage si c'est pas nécessaire
    • c'est un autre QObject qui va régarir sur cette event. Dans ton cas, es ce vraiment la vue qui doit savoir ce qu'il faut mettre dans le menu?


    C'est comme tous, ça dépend du besoin. Mais ça peut être une solution intéressante.

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Citation Envoyé par yan Voir le message
    En gros tous les events passent par la fonction event du QObject avant d'être dispatché dans les fonctions correspondante.
    On peut alors ajouter un filtre sur ces events pour les stopper ou faire des traitements en conséquence
    http://qt.developpez.com/doc/latest/...ml#eventFilter

    l'avantage:
    • évite de faire un héritage si c'est pas nécessaire
    • c'est un autre QObject qui va régarir sur cette event. Dans ton cas, es ce vraiment la vue qui doit savoir ce qu'il faut mettre dans le menu?


    C'est comme tous, ça dépend du besoin. Mais ça peut être une solution intéressante.
    D'accord, je vois un peu. Mais je ne suis pas entièrement d'accord avec votre solution.
    Premièrement, faire la surcharge de la fonction contextMenuEvent() ne met pas couteuse en terme d'héritage, car mon héritage était déjà là pour le drag & drop. (Ok, on pourrait commencé à cherche à faire du eventFilter sur le drag & drop.
    De plus, faire cette héritage, me permet d'avoir le menu que sur cette objet, et non sur tout les objets de ma fenêtre.
    Et puis troisième point, je n'ai pas de séparation MVC ... donc ... c'est plus du code bourrin et mal designer. ( Il faudra vraiment que j'apprenne à faire une application Qt correcte :s )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    D'accord, je vois un peu. Mais je ne suis pas entièrement d'accord avec votre solution.
    Premièrement, faire la surcharge de la fonction contextMenuEvent() ne met pas couteuse en terme d'héritage, car mon héritage était déjà là pour le drag & drop. (Ok, on pourrait commencé à cherche à faire du eventFilter sur le drag & drop.
    De plus, faire cette héritage, me permet d'avoir le menu que sur cette objet, et non sur tout les objets de ma fenêtre.
    Et puis troisième point, je n'ai pas de séparation MVC ... donc ... c'est plus du code bourrin et mal designer. ( Il faudra vraiment que j'apprenne à faire une application Qt correcte :s )
    Si tu as déjà de l'héritage, oui ma proposition est moins intéressante. Si ca se trouve on ne peut pas faire de drag & drop avec cette méthode. J'ai jamais essayé.
    C'était plus pour te montrer qu'il existais une autre méthode peux connu mais qui peut être parfois plus intéressant

    Par contre, j'ai pas compris :
    De plus, faire cette héritage, me permet d'avoir le menu que sur cette objet, et non sur tout les objets de ma fenêtre

  10. #10
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Juste que je voulais dire ... que j'ai pas vu la doc donc j'ai dit une bétise
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

Discussions similaires

  1. [script.aculo.us] Mixer une liste Automplete et Sortable pour un drag'n drop
    Par keaton7 dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 23/07/2009, 13h33
  2. [FLASH MX2004] Drag and drop entre deux List
    Par aldo-tlse dans le forum Flash
    Réponses: 15
    Dernier message: 24/09/2005, 01h10
  3. Réponses: 4
    Dernier message: 16/04/2005, 16h54
  4. [Forms] : liste d'éléments
    Par JuRu dans le forum Forms
    Réponses: 3
    Dernier message: 01/06/2004, 12h18

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