簡體   English   中英

Qt 5.6中的Opengl

[英]Opengl in Qt 5.6

我曾經使用過Qt 5.1.1,而OpenGL則可以正常工作。

現在,我已經安裝了Qt 5.6,看來像5.1.1那樣的OpenGL應用程序並不簡單。

GL函數(甚至將其包含在#include <QOpenGLFunctions>返回“未定義的引用”。也許因為它是一個非常新的版本,所以我沒有找到任何可以幫助我的東西)。

主要問題是:如何在Qt 5.6版本中使用OpenGL? 任何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

我假設您的“未定義的引用錯誤”指向您要使用的glColor()函數。

為了能夠使用諸如glColor() QOpenGLFunctions ,必須使GLWidget也從QOpenGLFunctions繼承。 例如:

#include <QOpenGLFunctions>

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

有關更多詳細信息,請參見此示例

注意強烈建議不要在新代碼使用QGLWidget ,而建議使用 QOpenGLWidget

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM