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 :

Modifier visuellement un Widget (exemple: tracer des traits dans un QListWidget)


Sujet :

Qt

  1. #1
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    Par défaut Modifier visuellement un Widget (exemple: tracer des traits dans un QListWidget)
    Bonsoir, voilà mon problème :

    _ Je dois creer un objet graphique qui comporte une suite d'éléments reliés par des traits et des fleches (un peu comme un graphcet ou un organigrame).

    Je me suis donc dis que je vais créer un objet dérivant de QListWidget, et modifier (dans un premier temps pour faire des tests) le paintEvent de cet objet pour voir si je peux tracer dedans.

    j'ai donc une classe myQListWidget (voici la déclaration) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class myQListWidget : public QListWidget
    {
        Q_OBJECT
     
    public:
        myQListWidget(QWidget *parent = 0);
    	QSize minimumSizeHint() const;
        QSize sizeHint() const;
     
    protected:
    	void paintEvent(QPaintEvent *event);
    };

    et voilà sa définition :

    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
    myQListWidget::myQListWidget(QWidget *parent)
        : QListWidget(parent)
    {
    }
     
     
    void myQListWidget::paintEvent(QPaintEvent * event)
    {
    	QListWidget::paintEvent(event);
    	QPainter painter(this);
     
    	//----- Reglages préliminaires de la fenêtre de tracé -----//
    	painter.setRenderHint(QPainter::Antialiasing, true);
    	painter.setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap));
    	painter.setBrush(QBrush(Qt::green, Qt::SolidPattern));
    	painter.drawRect(QRect(10,10,50,50));;	
    }
     
    QSize myQListWidget::sizeHint() const
    {
         return QSize(400, 200);
    }
     
    QSize myQListWidget::minimumSizeHint() const
    {
         return QSize(100, 100);
    }
    Pour testern j'ai ouvert designer, fait un nouveau Mainwindow et le membre que je lui ajoute est ma liste spéciale :

    voilà le constructeur du QMainWindow :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    drawingInList::drawingInList(QWidget *parent, Qt::WFlags flags)
    	: QMainWindow(parent, flags)
    {
    	ui.setupUi(this);
     
    	// ajout de la liste
    	liste = new myQListWidget(centralWidget());
     
    	liste->addItem("test 1");
    	liste->addItem("test 2");
    	liste->addItem("test 3");
    }

    Voilà, bien évidemment, à l'éxécution j'ai ma liste qui s'affiche mais c'est tout, je n'ai pas de dessin qui se fait à l'intérieur ...

    Any idea ?
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

  2. #2
    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 Kestufou Voir le message
    Voilà, bien évidemment, à l'éxécution j'ai ma liste qui s'affiche mais c'est tout, je n'ai pas de dessin qui se fait à l'intérieur ...
    Pourquoi une QListWidget??
    Sinon, as mon avis c'est peut être parceque les éléments de la list sont dessiné après et donc efface ton rectangle

  3. #3
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    Par défaut
    bah en fait, même sans appeler
    QListWidget::paintEvent(event);
    je n'ai rien qui se dessine, donc je ne suis pas sûr que ma méthode de dessin soit la bonne

    Pourquoi une liste?
    J'ai une liste d'éléments source (genre : etape 0, etape Aller à droite, etape aller à gauche, etape tout droit ...). Ensuite, je dois faire une sorte de graphcet en prenant des elements source pour les ajouter dans le pseudo graphcet en cliquant dessus.
    Donc je comptais prendre un QListWidget, le customiser et lui ajouter des QListWidgetItem customisés aussi. Pourquoi les item customisés ? En fait, un item (par exemple aller a droite) doit avoir des parametres réglables (par exemple : longueur de 3 metres). Je veux donc que mes items possèdent un pointeur vers un QWidget, ce QWidget étant une fenetre, un onglet ou autre qui permette de modifier dans une ihm les parametres.
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

  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 Kestufou Voir le message
    bah en fait, même sans appeler


    je n'ai rien qui se dessine, donc je ne suis pas sûr que ma méthode de dessin soit la bonne
    Elle fonctionne sur une QWidget.


    Pourquoi une liste?
    J'ai une liste d'éléments source (genre : etape 0, etape Aller à droite, etape aller à gauche, etape tout droit ...). Ensuite, je dois faire une sorte de graphcet en prenant des elements source pour les ajouter dans le pseudo graphcet en cliquant dessus.
    Donc je comptais prendre un QListWidget, le customiser et lui ajouter des QListWidgetItem customisés aussi. Pourquoi les item customisés ? En fait, un item (par exemple aller a droite) doit avoir des parametres réglables (par exemple : longueur de 3 metres). Je veux donc que mes items possèdent un pointeur vers un QWidget, ce QWidget étant une fenetre, un onglet ou autre Pourquoi ne pas utiliser les QGraphicView?

    Sinon tu pourrais essayer de customizer l'affichage des item avec delegate customizé
    http://qt.developpez.com/doc/latest/...-delegate.html

  5. #5
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    Par défaut
    J'avais utilisé un QGraphicsView juste pour tester quelque chose qui n'a rien à voir (j'avais d'ailleurs posé ici), mais je ne sais pas si c'est adapté à mon problème.
    Quant aux delegate customisés je ne sais pas du tout ce que c'est.

    Mon probleme est si irréalisable que ça ?
    (Lorsque j'ai dit que je n'étais pas sûr de ma méthode de tracé, j'avais testé aussi en changeant ma classe mère QListWidget par QWidget tout court ... mais ça n'avait pas marché non plus Mais puisque tu me dis que ça marche, je te fais confiance )
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

  6. #6
    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 Kestufou Voir le message
    Quant aux delegate customisés je ne sais pas du tout ce que c'est.
    Pour afficher, editer,... un item, Qt delege ceci à un delegate

    Citation Envoyé par Kestufou Voir le message
    Mon probleme est si irréalisable que ça ?
    je ne pense pas mais j'ai pas compris ce que tu veut faire

  7. #7
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    Par défaut
    je ne pense pas mais j'ai pas compris ce que tu veut faire
    Humm, j'ai dû mal m'expliquer alors.

    Pour faire simple :

    Tu prends un QListWidget dans lequel tu ajoutes un certain nombre d'items (donc des QListWidgetItem) avec des icones.

    Ce que je veux faire, c'est relier chacun des elements de la liste par un trait.

    Par exemple, sur la capture suivante, j'ai ma liste dans le dock de gauche :



    Je voudrais donc la modifier, pour qu'elle devienne comme ça par exemple :

    (euh, pas de capture pour le moment, je dois redemarrer sur mac os x pour uploader sur mon ftp, j'éditerai le message apres).

    EDIT :



    Sur cet exemple, j'ai même encadré les eléments en rouge, et reliés avec un trait noir. Plus tard (mais relativement tôt quand même ) faudra que je relie avec des fleches certains éléments.
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

  8. #8
    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
    Je ne voie pas bien l'utiliter d'utiliser une QListWidget. Je verrais deux solution:

    1- QGraphicView comme c'est du dessein

    2-une QWidget où tu customize le paintEvent pour faire tes fleches,ligne contour... avec un layout ou à la main, pour positionner tes objets

  9. #9
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    Par défaut
    L'interet d'un QListWidget c'est que je peux facilement (sans code) faire du glisser déposer de ma liste source vers ma liste cible, que y'a des méthodes count(), insert, que y'a des méthodes qui retournent le rectangle de sélection de l'item selectionné (ça peut être pratique)...
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

  10. #10
    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 Mongaulois Voir le message
    Sinon, as mon avis c'est peut être parceque les éléments de la list sont dessiné après et donc efface ton rectangle
    Bon j'arrête de dire des conneries
    en faite tu peut.
    Il faut que tu fasse cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QPainter painter(this->viewport());
    Se sont des scrollArea.

  11. #11
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    Par défaut
    Effectivement ça fonctionne maintenant.

    D'après la doc de QAbstractScroll Area :

    The area provides a central widget called the viewport, in which the contents of the area is to be scrolled (i.e, the visible parts of the contents are rendered in the viewport
    http://qt.developpez.com/doc/latest/...crollarea.html
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

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

Discussions similaires

  1. Tracer des individus dans un plan avec différentes couleurs
    Par stefsas dans le forum ODS et reporting
    Réponses: 4
    Dernier message: 19/09/2008, 10h12
  2. tracer un trait dans une boite de dialog
    Par clement127 dans le forum MFC
    Réponses: 6
    Dernier message: 21/11/2007, 15h28
  3. [FPDF] tracer des lignes dans une boucle
    Par marielaure2805 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 29/06/2007, 14h17
  4. tracer des traits .. (a partir d'une image)
    Par estampille dans le forum Applets
    Réponses: 1
    Dernier message: 08/08/2006, 13h02
  5. comment tracer des traits à la souris ?
    Par FoxDeltaSierra dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 01/09/2005, 16h49

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