Qt 5.6中的Opengl

时间:2016-04-06 22:39:57

标签: c++ qt opengl opengl-es

我曾经使用Qt 5.1.1和OpenGL过去工作正常。

现在我已经安装了Qt 5.6,看起来OpenGL应用程序并不像5.1.1那样简单。

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

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

我在一些Qt手册示例中看到initializeOpenGLFunctions()使其工作,但我的代码无法识别此语句(我试图#include很多东西)。

代码是最基本的:

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

mainwindow.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

1 个答案:

答案 0 :(得分:2)

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

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

#include <QOpenGLFunctions>

class GLWidget: public QGLWidget, protected QOpenGLFunctions
{ // ...
};

有关详细信息,请参阅this example

注意strongly advise against using QGLWidget in new code支持QOpenGLWidget