mixing QtOpenGL and QPaint programming
Unsolved
General and Desktop
-
I encountered a problem when mixing QtOpenGLWidget and QtPaint programming. I want to render 3D model with OpenGL and paint a text with qtpaint, but the text was not painted correctly, and was painted as points. My code is following, please help me how fix this problem.
void GLWidget::paintGL() { //!OpenGL Draw QPainter painter(this); painter.beginNativePainting(); // painter.begin(this); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // glEnable(GL_BLEND); // glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // glEnable(GL_LINE_SMOOTH); //!render model coordPro->bind(); int modelLoc = coordPro->uniformLocation("model"); glUniformMatrix4fv(modelLoc, 1, GL_FALSE, m_world.data()); VBO.bind(); VAO.bind(); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), nullptr); glEnableVertexAttribArray(0); glLineWidth(2.0f); glDrawArrays(GL_LINES, 0, indexSize); VBO.release(); VAO.release(); coordPro->release(); //!Draw Text glDisable(GL_BLEND); glDisable(GL_DEPTH_TEST); glDisable(GL_STENCIL_TEST); glDisable(GL_SCISSOR_TEST); QVector4D ndc = m_proj * m_camera * m_world * QVector4D(0.0f, 0.0f, 20.0f, 1.0f); //!pixels float x = (this->width() * 0.5f - 0.5f) * (ndc[0] + ndc[3]); float y = (this->height() * 0.5f - 0.5f) * (ndc[3] - ndc[1]); qDebug() << "x = " << x << " y = " << y << "\n"; QPen pen; pen.setColor(Qt::red); painter.setPen(pen); painter.drawText(x, y, QString("This is text"));//they are painted as POINTS, not text painter.endNativePainting(); // painter.end(); }

-
@limy said in mixing QtOpenGL and QPaint programming:
Try doing endNativePainting(); before you start doing QPainter stuff, and it'll restore the QPainter state. Actually, I think you probably want to do your OpenGL painting first and once that's done then create the QPainter and paint with it so you don't need to interleave the painter and OpenGL.