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.
Version imprimable
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:
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:
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.
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:
1
2
3
4
5
6 // Drawbox QTableWidgetItem* drawBox = new QTableWidgetItem; _qDrawBox.insert(row,drawBox); [...] _ui->tablePoints->setItem(row,10,drawBox);
Et ça me renvoieCode:
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:
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éparCode:QImage img;
et ça passe. Merci beaucoup !Code:
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 :D)