gpt4 book ai didi

qt - 如何在 QOpenGlWidget 的 paintGL 中使用 QPainter

转载 作者:行者123 更新时间:2023-12-04 20:35:30 25 4
gpt4 key购买 nike

我最近从 QGLWidget 切换到新的 QOpenGlWidget,因为后者缺少 renderText() 函数。我正在考虑使用 QPainter 在我的 openGL 3D 图形上绘制一些文本。

我最初通过 paintGL() 函数渲染所有内容,如何在该函数中安全地添加 QPainter?

我的代码是这样的:

paintGL()
{
//Raw OpenGL codes
//....

//Where to safely use the QPainter?
}

最佳答案

只需添加 QPainter直接调用paintGL()方法。

paintGL()
{
// OpenGL code...

QPainter p(this);
p.drawText(...);

}
paintGL()函数由 QOpenGLWidget::paintEvent() 调用所以使用 QPainter 应该没有任何问题.

小例子:
class CMyTestOpenGLWidget : public QOpenGLWidget
{
public:
CMyTestOpenGLWidget(QWidget* parent) : QOpenGLWidget(parent) {}

void initializeGL() override
{
glClearColor(0, 0, 0, 1);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);
}

void paintGL() override
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glBegin(GL_TRIANGLES);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(-0.5, -0.5, 0);
glColor3f(0.0, 1.0, 0.0);
glVertex3f(0.5, -0.5, 0);
glColor3f(0.0, 0.0, 1.0);
glVertex3f(0.0, 0.5, 0);
glEnd();

QPainter p(this);
p.setPen(Qt::red);
p.drawLine(rect().topLeft(), rect().bottomRight());
}

void resizeGL(int w, int h) override
{
glViewport(0, 0, w, h);
}
};

enter image description here

关于qt - 如何在 QOpenGlWidget 的 paintGL 中使用 QPainter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36568668/

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