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.
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.
Qpainter est le conteneur du dessin, une fois instancié tu dois faire ton dessin dedans.
Exemple :
Regardes la doc :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Qpainter painter(); painter.drawRect(10,10,10,10);
http://qt.developpez.com/doc/4.7/qpainter/#drawrect
Comment fais-tu ton tableau ? QTableWidget ?
Exemple :
Avec cela ton QPainter dessine le tableau dans une QImage, qui te servira à "décorer" ta cellule.
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);
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
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.
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 // Drawbox QTableWidgetItem* drawBox = new QTableWidgetItem; _qDrawBox.insert(row,drawBox); [...] _ui->tablePoints->setItem(row,10,drawBox);
Et ça me renvoie
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. } }
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) ?
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
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 QImage img;
et ça passe. Merci beaucoup !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 QImage img = QImage(25,30,QImage::Format_RGB16); img.fill(3);
(Il ne me reste plus qu'à trouver un rectangle de la bonne taille pour que ça rentre dans la cellule)
Partager