qwidget에서 일부 마름모를 그려 이미지로 자동 저장하려고합니다. paintEvent에서 다음 코드를 사용하고 "QWidget :: repaint : Recursive repaint detected"오류가 발생합니다. 문제는 render()가 paintEvent()를 다시 호출하는 것처럼 보입니다. 항상 무한 반복적 인 paintEvent 호출에 갇히게됩니다. 그리기 후에 자동으로 qwidget을 저장할 수있는 방법이 있습니까? 모든 조언은 감사 할 것입니다.자동으로 qwidget를 이미지로 저장하는 방법
void 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();
int rec_size=64;
int rows=floor((double)height/(double)rec_size);
int cols=floor((double)width/(double)rec_size);
QPointF points[4];
for (int i=0;i<floor(rows);i++){
for (int j=0;j<floor(cols);j++){
painter.setBrush(QBrush(colors[rand() % color_size]));
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);
}
}
QPixmap pixmap(this->size());
this->render(&pixmap);
pixmap.save("test.png");
}
감사합니다. @ Ashot – newww0
@ newww0 시도를 통해 코드를 업데이트 할 수 있습니까? –
@ Ashot @ Dmitry Sazonov 새 코드로 시도했지만 여전히 QWidget :: repaint : Recursive repaint detected를 얻었습니다. 그러나 이번에는 오류가 아닌 경고로 보입니다. 매번 창 크기를 변경하면 위젯이 다시 그려지고 경고가 튀어 나옵니다. – newww0