gpt4 book ai didi

c++ - 如何自动将qwidget保存为图像

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:43:34 24 4
gpt4 key购买 nike

我想在 qwidget 中绘制一些菱形并自动将其保存为图像。我在 paintEvent 中使用以下代码并收到此错误“QWidget::repaint:检测到递归重绘”。问题是 render() 似乎再次调用了 paintEvent(),我总是陷入无限的递归 paintEvent 调用。有没有办法在绘制后自动保存 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");

}

最佳答案

您可以将 bool 变量作为小部件中的成员。它将控制是否调用渲染函数。所以你可以避免无限递归。

m_callRender 是成员变量。如果 paintEvent 作为 render 函数的结果被调用,则 render 将不会再次调用。

paintevent 
{
... // drawing part

if (m_callRender) {
m_callRender = false;
QPixmap pixmap(this->size());
this->render(&pixmap);
pixmap.save("test.png");
m_callRender = true;
}
}

关于c++ - 如何自动将qwidget保存为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24927869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com