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 :

Débuts avec QPainter

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 2
    Par défaut Débuts avec QPainter
    Bonjour,

    Je débute sous Qt, et je ne comprends rien au QPainter. J'ai quelque chose d'assez simple à faire, à savoir dessiner un rectangle dans une case d'un tableau, et je n'y arrive pas.

    Merci pour votre aide.

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 265
    Par défaut
    Qpainter est le conteneur du dessin, une fois instancié tu dois faire ton dessin dedans.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Qpainter painter();
    painter.drawRect(10,10,10,10);
    Regardes la doc :

    http://qt.developpez.com/doc/4.7/qpainter/#drawrect

    Comment fais-tu ton tableau ? QTableWidget ?

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    QImage img;
    Qpainter painter(&img);
    painter.drawRect(10,10,10,10);
    QTableWidget     *tableau= new QTableWidget;
    QTableWidgetItem *cellule= new QTableWidgetItem;
    cellule->setData(Qt::DecorationRole, QPixmap::fromImage(*img));
    tableau->setItem(0, 0, thumbnail);
    Avec cela ton QPainter dessine le tableau dans une QImage, qui te servira à "décorer" ta cellule.

    Ce n'est pas la seule façon de faire.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 2
    Par défaut
    Merci beaucoup.

    J'ai un tableau QTableWidget qui a été créé dans une fonction, avant, avec un nombre de lignes dynamique. En 10e colonne, je lui ai rentré un QTableWidgetItem. _qDrawBox est une QList<QTableWidgetItem*>, attribut de ma classe TabPoints, dans laquelle on se trouve. C'est le seul moyen que j'ai trouvé pour réussir à rechopper les cellules une par une au moment de dessiner dedans.

    Création du tableau, en gros.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Drawbox
    QTableWidgetItem* drawBox = new QTableWidgetItem;
    _qDrawBox.insert(row,drawBox);
    [...]
     _ui->tablePoints->setItem(row,10,drawBox);
    Ma fonction DrawLine, dans laquelle j'essaie de dessiner mes rectangles, un par cellule.
    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
     
    void TabPoints::drawLine()
    {
        for(int i=0;i<nbLignes;i++)
        {
            QImage img;
            QPainter painter(&img);
            painter.drawRect(10,10,10,10);
            QTableWidgetItem* myDrawBox;
            myDrawBox = _qDrawBox.value(i);  //on choppe la cellule de la i-ème ligne
            myDrawBox->setData(Qt::DecorationRole, QPixmap::fromImage(img));
            _qDrawBox.replace(i,myDrawBox);
            //J'ai pas compris la dernière ligne de ton code, avec les Thumbnails.
        }
    }
    Et ça me renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QPainter::begin: Paint device returned engine == 0, type: 3
    QPainter::drawRects: Painter not active
    De ce que j'ai compris, il faudrait que je redéfinisse le QPaintEvent pour me dessiner mon rectangle, mais après comment je fais pour lui passer en plus les coordonnées de mon rectangle (qui ne sont pas fixes, en vrai) ?

    EDIT : Ok c'est bon. Mon problème était que l'image dans laquelle j'essayais de dessiner était vide. J'ai remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QImage img = QImage(25,30,QImage::Format_RGB16);
    img.fill(3);
    et ça passe. Merci beaucoup !
    (Il ne me reste plus qu'à trouver un rectangle de la bonne taille pour que ça rentre dans la cellule )

Discussions similaires

  1. [AJAX] Débuts avec Sajax
    Par Ziltoid dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/10/2007, 13h28
  2. [DW8] Début avec dreamweaver 8
    Par coralor dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 17/07/2007, 09h13
  3. Début avec Netbeans 5.5
    Par Charly303 dans le forum NetBeans
    Réponses: 4
    Dernier message: 23/10/2006, 18h29
  4. Début avec BIRT : page affichée sans les data
    Par Darkrix dans le forum BIRT
    Réponses: 2
    Dernier message: 18/09/2006, 11h18
  5. Mes premiers débuts avec Dev-C++ : ca bloque !
    Par fab56 dans le forum Dev-C++
    Réponses: 6
    Dernier message: 20/02/2005, 16h24

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