打开Qt 5.6中的gl

Opengl in Qt 5.6

本文关键字:中的 gl Qt 打开      更新时间:2023-10-16

我曾经使用Qt 5.1.1,OpenGL曾经工作得很好。

现在我已经安装了Qt 5.6,OpenGL应用程序似乎不像5.1.1那样简单

GL函数(甚至包括#include <QOpenGLFunctions>)返回"未定义引用"。也许因为它是一个非常新的版本,我找不到任何帮助。

主要问题是:如何在Qt 5.6版本中使用OpenGL?GL的任何功能都有效。

在Qt手册的一些示例中,我看到initializeOpenGLFunctions()使它发挥了作用,但我的代码无法识别此语句(我尝试过#包含很多内容)。

代码是最基本的:


glwidget.h:

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

主窗口.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

glwidget.cpp:

#include "glwidget.h"
#include <QWidget>
#include <QOpenGLFunctions>

GLWidget::GLWidget(QWidget *parent) :
    QGLWidget(parent)
{
}
void GLWidget::initializeGL()
{
    glClearColor(1,1,0,1);
}
void GLWidget::paintGL()
{
}
void GLWidget::resizeGL(int w, int h)
{
}

main.cpp:

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

mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
MainWindow::~MainWindow()
{
    delete ui;
}

test.pro:

QT       += core gui opengl
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = Test
TEMPLATE = app

SOURCES += main.cpp
        mainwindow.cpp 
    glwidget.cpp
HEADERS  += mainwindow.h 
    glwidget.h
FORMS    += mainwindow.ui

我假设您的"未定义引用错误"指向您尝试使用的glColor()函数。

为了能够使用QOpenGLFunctions,如glColor(),您必须使您的GLWidget也继承自QOpenGLFunctions;例如:

#include <QOpenGLFunctions>
class GLWidget: public QGLWidget, protected QOpenGLFunctions
{ // ...
};

有关更多详细信息,请参见此示例。

注意:强烈建议不要在新代码中使用QGLWidget,而应使用QOpenGLWidget