如何将qwidget自动保存为图像
how to save qwidget as image automatically
我想在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");
}
您可以将布尔变量作为小部件中的成员。它将控制是否调用渲染函数。所以你可以避免无限递归。
m_callRender
是成员变量。如果render
函数导致paintEvent
被调用,render
将不再被调用。
paintevent
{
... // drawing part
if (m_callRender) {
m_callRender = false;
QPixmap pixmap(this->size());
this->render(&pixmap);
pixmap.save("test.png");
m_callRender = true;
}
}
在painteevent()之外调用render(),渲染将重新绘制小部件并将其保存为pixmap还是我错过了什么?
如果您需要捕获油漆事件本身,则使用QObject::installEventFilter()或QObject::event()例程。
相关文章:
- Gstreamer:每 5 秒使用多文件墨水保存图像/jpeg
- OpenCV imwrite不会保存图像
- qpixmap qclipboard和保存图像倒置
- 如何从 GIFLIB 保存图像结构中获取 RGB 颜色数据
- 处理openCV后,保存图像要文件
- Haar检测-保存图像的Mat,以便获得并显示前一帧
- 在opencv中使用imwrite保存图像时,会将图像全部写入黑色,但imshow会正确显示
- CImg保存图像会更改值
- 通过WiFi从Android向Windows发送/保存图像时数据过多
- 使用 libpng - const 对象保存图像
- 无法使用OpenCV保存图像
- 如何在c中使用socket编程保存图像数据
- 通用Windows可以动态地绘制图形和保存图像
- 模糊保存图像检测对象使用OpenCV
- Qt抓取小部件和保存图像
- 如何在英特尔RealSense(Visual c++)中保存图像
- 如何从RGBA格式保存图像的缓冲区中创建opencv中的图像
- 如何使用libcurl保存图像
- 需要一些手来渲染、显示和保存图像
- 如何通过http下载和保存图像