2016-04-06 3 views
1

Раньше я работал с Qt 5.1.1, а OpenGL работал нормально.Opengl in Qt 5.6

Теперь я установил Qt 5.6 и кажется, что это простое приложение OpenGL, как 5.1.1. ..

функции GL (даже включая его #include <QOpenGLFunctions> возвращает «неопределенная ссылка» Может быть, потому что это очень новая версия, я ничего не найти, чтобы помочь мне в том, что

Основной вопрос: Как начать использовать OpenGL с версией Qt 5.6? Любые функции 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 

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 

ответ

2

Я предполагаю, что ваша «неопределенная опорная ошибка» указывала на функции glColor(), которые вы пытались использовать.

Для того, чтобы иметь возможность использовать QOpenGLFunctions такие как glColor(), вы должны сделать свой GLWidget также наследовать от QOpenGLFunctions; например:

#include <QOpenGLFunctions> 

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

См this example для более подробной информации.

Примечание: strongly advise against using QGLWidget in new code в пользу QOpenGLWidget.

+0

Большое спасибо, vicrucann !!! Оно работает!! –

+0

Рад, что это помогло! – vicrucann