【发布时间】:2015-12-20 13:09:26
【问题描述】:
我尝试了这里描述的 QOpenGLWidget 示例: https://stackoverflow.com/a/31524956/4564882
但我只得到一个黑色小部件。代码完全相同。这是与 QopenGLWidget 相关的代码:
OGLWidget::OGLWidget(QWidget *parent)
: QOpenGLWidget(parent)
{
}
OGLWidget::~OGLWidget()
{
}
void OGLWidget::initializeGL()
{
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 OGLWidget::paintGL()
{
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();
}
void OGLWidget::resizeGL(int w, int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, (float)w/h, 0.01, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,0,5,0,0,0,0,1,0);
}
我在这里尝试了这个例子:https://doc.qt.io/archives/qt-5.3/qtopengl-2dpainting-example.html。它工作正常(尝试两个基类:QGLWidget 和 QOpenGLWidget。这是与 Widget 关联的代码:
GLWidget::GLWidget(Helper *helper, QWidget *parent)
: QGLWidget(QGLFormat(QGL::SampleBuffers), parent), helper(helper)
{
elapsed = 0;
setFixedSize(200, 200);
setAutoFillBackground(false);
}
void GLWidget::animate()
{
elapsed = (elapsed + qobject_cast<QTimer*>(sender())->interval()) % 1000;
repaint();
}
void GLWidget::paintEvent(QPaintEvent *event)
{
QPainter painter;
painter.begin(this);
painter.setRenderHint(QPainter::Antialiasing);
helper->paint(&painter, event, elapsed);
painter.end();
}
我使用在我的机器上构建的 Qt 5.5.1 二进制文件。我默认使用 Build Configuration,所以它基于 Qt ANGLE 而不是 Desktop OpenGL。 这种行为有什么问题?
【问题讨论】:
-
更改
glClearColor时颜色会改变吗? -
@BDL:是的,如果我指定一种颜色(例如红色),它将显示所有具有所选颜色(红色)的小部件。但它没有显示我想要的三角形。
-
您的三角形未绘制,因为您使用的是已弃用的 OpenGL 2.x 代码。 Qt 使您可以访问以后应该考虑使用的 OpenGL 函数。您为 OpenGL 函数使用了哪些依赖项?
-
谢谢!我使用包括:#include
#include #include 和 Qt5(如果我与 Qt 4.8 链接,相同的代码可以工作)。我正在链接库:Qt5OpenGLd.lib、opengl32.lib、glu32.lib。我怎么能使用这个不推荐使用的代码,因为我正在将代码从 Qt 4.8 迁移到 Qt 5.5,但我应该保持 OpenGL 小部件原样,修改时间太长。 -
我正在使用 Qt5 链接到 QtANGLE 头文件。如何切换到桌面 OpenGL。