改自:基于QOpenGLWidget自适应大小更新显示图片_qopenglwidget显示图片_逆天の诸葛的博客-CSDN博客
我要实现qimage实时显示,上面的只有初始化,后面就没变化了,通过摸索实现功能,可能不是最优的:
void MyGLWidget::setBackground(QImage image)
{
//qDebug("setBackground");
m_image = image;
if(texture != nullptr){
texture->destroy();
texture->create();
texture->setSize(image.width(),image.height(),1);
texture->setData(image);
}
update();
}
void MyGLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除屏幕缓存和深度缓冲
texture->bind(); //绑定纹理
QMatrix4x4 matrix;
matrix.translate(0.0, 0.0, -5.0); //矩阵变换
program.enableAttributeArray(0);
program.enableAttributeArray(1);
program.setAttributeArray(0, vertices.constData());
program.setAttributeArray(1, texCoords.constData());
program.setUniformValue("texture", 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
texture->release(); // 加这句
qDebug("paint");
}
测试代码:
QTimer *timer = new QTimer(this);
timer->setInterval(20);
connect(timer,&QTimer::timeout,this,[=](){
qDebug("time out");
static int i=0;
QString file;
file = QString("c:\\Users\\dd\\Desktop\\a%1.png").arg(i);
QImage img(file);
ui->widget->setBackground(img);
i++;
i %= 2;
});
timer->start();
源码在:
qopenglwidget实现qimage图片动态显示(视频)及opengl学习资源-3YL的博客 (labisart.com)