I use these only with little modification from qt4.8 up to qt5.8 ...... not the best, not well done, but it works ... maybe looking at it you will be able to bring you illumination ....
after these for sending image from qthread that grab the frame to gui windows (glwidget)I use connect/slot mechanism ... In m y gui there are 3 of these.
glwidg::glwidg(QWidget *parent) :
QGLWidget(parent)
{
this->setAttribute(Qt::WA_DeleteOnClose); //// inizialize capture dimension windows
QGLWidget(QGLFormat(QGL::DirectRendering));
setMaximumSize(480,360);//(352,288);
initializeGL();
//resizeGL(280,320);
paintGL();
}
int glwidg::xAtPress = 0;
int glwidg::yAtPress = 0;
int glwidg::xsend = 0;
int glwidg::ysend = 0;
cv::Point glwidg::SendMousePoint(0,0);
void glwidg::mouseMoveEvent(QMouseEvent * event)
{
xAtPress = event->x();
yAtPress = event->y();
xsend = round(xAtPress*1.422222222);
ysend = round(yAtPress*1.2);
/* if (xsend < 0) {xsend = 0;}
if (xsend > 640) {xsend = 640;}
if (ysend < 0) {ysend = 0;}
if (ysend > 480) {ysend = 480;}*/
SendMousePoint = cv::Point(xsend, ysend);
emit MousePoint(SendMousePoint);
//qDebug() << "Mausepoint glwidg: " << SendMousePoint.x << ", " << SendMousePoint.y;
}
void glwidg::resizeGL(int w, int h)
{
makeCurrent();
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, w, 0, h); // set origin to bottom left corner
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void glwidg::initializeGL()
{
makeCurrent();
glClearDepth(2000.0);
glDisable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
glDisable(GL_COLOR_MATERIAL);
glEnable(GL_BLEND);
glEnable(GL_POLYGON_SMOOTH);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
qglClearColor(Qt::white);
}
void glwidg::paintGL()
{
makeCurrent();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
qglColor(Qt::white);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
glMatrixMode(GL_MODELVIEW); /*+*/
glEnable(GL_DEPTH_TEST);
if (cambio1 == 0)
{
qform1.load("/home/s/RIS/control2_106.png");
qq1frame = qform1.scaled(this->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
}
else
{
qq1frame = qform1.scaled(this->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
}
qqframe = qq1frame.mirrored(false, true);
if(!qqframe.isNull())
{
qqframe = qqframe.scaled(this->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
// glDrawPixels(qqframe.width(), qqframe.height(), GL_RGBA, GL_UNSIGNED_BYTE, qqframe.bits());
// or do 2D texture mapping
glMatrixMode(GL_MODELVIEW); /**/
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,qqframe.width(),qqframe.height(),0);
glMatrixMode(GL_MODELVIEW);
//glDisable(GL_DEPTH_TEST);
glLoadIdentity();
glEnable(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D( GL_TEXTURE_2D, 0, 4, qqframe.width(), qqframe.height(), 0, GL_BGRA, GL_UNSIGNED_BYTE, qqframe.bits() );
glBegin(GL_QUADS);
glTexCoord2f(0,0); glVertex2f(0,qqframe.height());
glTexCoord2f(0,1); glVertex2f(0,0);
glTexCoord2f(1,1); glVertex2f(qqframe.width(),0);
glTexCoord2f(1,0); glVertex2f(qqframe.width(),qqframe.height());
glEnd();
glDisable(GL_TEXTURE_2D);
// .... end
// qDebug() << ("ho disegnato??");
glDisable(GL_DEPTH_TEST);
glFlush();
}
if(qqframe.isNull())
{
glClear(GL_COLOR_BUFFER_BIT);
qglColor(Qt::white);
}
}
void glwidg::donextcam()
{
makeCurrent();
}
void glwidg::imma_orig_r1(QImage qi1)
{
cambio1 = 1;
qform1 = qi1;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
updateGL();
}
void glwidg::stopcam1(bool st1)
{
if (st1)
{
cambio1 = 0;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
updateGL();
}
else
{
cambio1 = 1;
}
}
regards
giorgio