运行 QT Creator 时出现 OpenGL 问题

问题描述 投票:0回答:2

我正在尝试使用 QT Creator 运行 OpenGL 的基本示例来为窗口提供颜色。但是,在调用 OpenGL 指令时,我在编译中遇到错误: glClearColor(1.0,1.0,0.0,1.0); 接下来是 *.pro 文件:

QT       += core gui opengl
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = test2
TEMPLATE = app
SOURCES += main.cpp\
        mainwindow.cpp \
    glwidget.cpp
HEADERS  += mainwindow.h \
    glwidget.h
FORMS    += mainwindow.ui

glwidget.h 是下一个:

#ifndef GLWIDGET_H
#define GLWIDGET_H
#include <QGLWidget>
class GLWidget : public QGLWidget
{
    Q_OBJECT
public:
    explicit GLWidget(QWidget *parent = 0);
    void initializeGL();    
};
#endif // GLWIDGET_H

接下来是 glwidget.cpp:

#include "glwidget.h"
GLWidget::GLWidget(QWidget *parent) :
    QGLWidget(parent)
{
}
void GLWidget::initializeGL(){
    glClearColor(1.0,1.0,0.0,1.0);
}

主要.cpp:

#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

我已经检查过,在 *.pro 中我已经包含了 opengl: QT += 核心 GUI opengl 另外,我删除了QT Creator创建的“YourProjectName-build-desktop”文件夹并再次构建,但没有成功。

错误是: C: est2\glwidget.cpp:9: 错误: 未定义对 `_imp__glClearColor@16' 的引用 其中第 9 行是 glClearColor(1.0,1.0,0.0,1.0);

我缺少哪个额外步骤?

提前感谢您的帮助

干杯 © 2016 Microsoft 条款 隐私和 cookies 开发人员 英语(美国)

c++ qt opengl opengl-es
2个回答
7
投票

尝试将

LIBS += -lOpengl32
添加到 .pro 文件

如果您使用的是 qt 5,您不妨采取这条路线

QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
f->glClearColor(1.0f, 1.0f, 0.0f, 1.0f);

http://doc.qt.io/qt-5/qopenglwidget.html http://doc.qt.io/qt-5/qopenglcontext.html

编辑:

刚刚测试过它可以工作。但需要qt5。 遗留函数似乎是在 qt 5 中定义的,所以我省略了 QOpenGLFunctions。

#include <QOpenGLWidget>

class GLWidget : public QOpenGLWidget
{
public:
    GLWidget(QWidget* parent) :
        QOpenGLWidget(parent)
    {

    }

protected:
    void initializeGL()
    {
        glClearColor(1.0f, 1.0f, 0.0f, 1.0f);
    }

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

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

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

0
投票

这个问题很老了,但我还是找到了。还有一种更跨平台的方法(至少使用Qt6)

如官方示例所示https://code.qt.io/cgit/qt/qtbase.git/tree/examples/opengl/hellogl2/glwidget.h?h=6.6你可以继承你的类QOpenGL函数:

class YourGLWidget : public QOpenGLWidget, protected QOpenGLFunctions

QOpenGLFunctions
提供了 opengl 函数的包装器并为您进行链接。你还需要从
initializeOpenGLFunctions();
调用
initializeGL()
,然后你可以使用
glClearColor
或其他opengl函数

© www.soinside.com 2019 - 2024. All rights reserved.