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 :

Dessin personnalisé pour un QPushButton

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Par défaut Dessin personnalisé pour un QPushButton
    Bonjour.
    Je souhaite dessiner un truc tout simple (ici uen ligne) dans un QPUshButton.
    J'ai un code qui compile mais me renvoi une fenetre avec un bouton "vierge" quand je l'exécute.
    J'ai oublié quoi ?

    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
    mDrawBox=new QFrame();
    QVBoxLayout *vLayout = new QVBoxLayout;
     
    QLine vLine(10,0,40,0);
     QPen pen(Qt::green, 3, Qt::DashDotLine);
     
    QPainter vPainter;
    vPainter.setPen(pen);
    vPainter.drawLine(vLine);
     
     
    QIcon vIcon;
    vIcon.paint(&vPainter,0,-5,50,5);
    QPushButton *vButton=new QPushButton;
    vButton->setIcon(vIcon);
    vLayout->addWidget(vButton);
    mDrawBox->setLayout(vLayout);
     
    mDrawBox->setEnabled(true);
    mDrawBox->setWindowModality(Qt::WindowModal );
    mDrawBox->setWindowFlags(Qt::WindowStaysOnTopHint  );
    mDrawBox->show();

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Par défaut
    Bonjour,

    D'après la doc de QPainter, lors de l'utilisation de QPainter sur un widget, il ne peut être utilisé que dans la fonction paintEvent().

    Il faut donc créer un classe héritant de QPushButton qui implémente la fonction paintEvent() et faire le "dessin" dans cette fonction.

    Voici un exemple simple que j'ai trouvé sur Stackoverflow et qui dessine un rectangle:
    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 Widget::on_pushButton_clicked()
    {
        drawShapes = !drawShapes;
        update();
    }
     
    void Widget::paintEvent(QPaintEvent *)
    {
        QPainter painter(this);
     
        if(drawShapes)
        {
            QRectF rectangle(10.0, 20.0, 80.0, 60.0);
            int startAngle = 30 * 16;
            int spanAngle = 120 * 16;
            painter.drawArc(rectangle, startAngle, spanAngle);
        }
    }
    En espérant vous avoir aidé.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Par défaut
    ça me parait être une solution efficace. Je teste ça lundi pour confirmer. Merci beaucoup !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Par défaut
    Je récupère un
    "QPainter::begin:¨Paint device returned engine ==0, type: 1"

    si j'essaie de dessiner en dehors du paint event.

    A Priori pour dessiner en dehors du paint event, il faut un flag particulier (que je n'ai pas trouvé)

    Sinon la méthode fonctionne.


    Si quelqu'un trouve le flag pour fermer ce thread ce serai parfait

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par Zennoi Voir le message
    Si quelqu'un trouve le flag pour fermer ce thread ce serai parfait
    C'est le bouton qui se trouve après la dernière intervention, à peu près au milieu de la page.

    Il suffit de cliquer dessus

    Je l'ai fait pour toi, donc, inutile de recliquer dessus
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Par défaut
    Citation Envoyé par Zennoi Voir le message
    Je récupère un
    "QPainter::begin:¨Paint device returned engine ==0, type: 1"

    si j'essaie de dessiner en dehors du paint event.
    Oui car c'est interdit sur un widget. Tu es obligé de passer par painEvent(), c'est la seule solution. Par contre tu pourrais dessiner sur un QPixmap, QPicture ou QImage par exemple.

    Merci d'avoir confirmé la solution.

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 10/12/2007, 09h46
  2. message personnalisé pour doublon refusé
    Par schwarzy2 dans le forum IHM
    Réponses: 4
    Dernier message: 19/09/2007, 19h37
  3. Réponses: 2
    Dernier message: 22/05/2007, 16h32
  4. [C#][Cursor] Définir un curseur personnalisé pour un contrôle
    Par nicolas.pied dans le forum Windows Forms
    Réponses: 1
    Dernier message: 25/03/2007, 03h16
  5. dessiner losange pour débutant
    Par lenneth666 dans le forum OpenGL
    Réponses: 2
    Dernier message: 20/03/2007, 14h45

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