J'essaie de dessiner des losanges avec des couleurs aléatoires dans un QWidget
. Et je veux enregistrer le QWidget
actuel comme image. J'utilise un tel code pour ce faire:enregistrer les éléments actuels sur qwidget comme image
QPixmap pixmap(this->size()); this->render(&pixmap); pixmap.save("test.png");
Le problème est que le render()
semble appeler paintEvent
à nouveau, et le paintEvent
attirera les grondements avec de nouvelles couleurs au hasard, de sorte que je reçois toujours un autre Image enregistrée par rapport à l'image affichée. Quelqu'un peut-il me dire comment enregistrer le courant QWidget
? Merci d'avance.
Code pour grondements dessin:
vide Dialog :: paintEvent (QPaintEvent * e) {
QPainter painter(this); QRect background(0,0,this->geometry().width(),this->geometry().height()); painter.setBrush(QBrush(Qt::white)); painter.setPen(Qt::NoPen); //QBrush bbrush(Qt::black,Qt::SolidPattern); painter.drawRect(background); int width = this->geometry().width(); int height = this->geometry().height(); //draw rectangles int rec_size=64; int rows=0; int cols=0; rows=floor((double)height/(double)rec_size); cols=floor((double)width/(double)rec_size); QPointF points[4]; // QRect rec(0,0,rec_size,rec_size); for (int i=0;i<floor(rows);i++){ for (int j=0;j<floor(cols);j++){ painter.setBrush(QBrush(colors[rand() % color_size])); //QPainter painter(this); points[0] = QPointF(rec_size*(j),rec_size*(i+0.5)); points[1] = QPointF(rec_size*(j+0.5),rec_size*(i)); points[2] = QPointF(rec_size*(j+1),rec_size*(i+0.5)); points[3] = QPointF(rec_size*(j+0.5),rec_size*(i+1)); painter.drawPolygon(points, 4); } } painter.end();
}
Correct: dessinez ce que vous devez 'QImage', et d'en tirer' QImage' sur l'événement de peinture. –