运行QT Creator时OpenGL出现问题

Problems with OpenGL when running QT Creator

本文关键字:问题 OpenGL QT Creator 运行      更新时间:2023-10-16

我正在尝试运行OpenGL的基本示例,使用QT Creator为窗口提供颜色。但是,在调用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构建桌面"文件夹,并再次构建,但没有成功。

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

我少了哪一步?

提前感谢您对的帮助

干杯©2016 Microsoft隐私条款;cookies Developers English(美国)

尝试将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.htmlhttp://doc.qt.io/qt-5/qopenglcontext.html

编辑:

刚刚测试了这个,它有效。但是需要qt5。遗留函数似乎是在qt5中定义的,所以我省略了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);
    }
};