我正在尝试使用 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 开发人员 英语(美国)
尝试将
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);
}
};
这个问题很老了,但我还是找到了。还有一种更跨平台的方法(至少使用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函数