QOpenGLWidget空白不顯示繪圖內容

在做一個簡單的基於Qt的OpenGL繪圖的時候,發現通過調用Qt自帶類QOpenGLWidget時,只顯示背景顏色,不顯示繪製的內容。
最初的代碼如下:
頭文件

#ifndef MYOPENGLWIDGET_H
#define MYOPENGLWIDGET_H

#include <QOpenGLWidget>
#include <QOpenGLFunctions>
class myOpenglWidget : public QOpenGLWidget, protected QOpenGLFunctions
{
    Q_OBJECT
public:
    explicit myOpenglWidget(QWidget *parent = nullptr);

protected:
    void initializeGL();
    void resizeGL(int w, int h);
    void paintGL();
signals:

public slots:
};

#endif // MYOPENGLWIDGET_H

cpp文件

#include "myopenglwidget.h"
#include <iostream>
#include "glut.h"
using namespace std;
myOpenglWidget::myOpenglWidget(QWidget *parent) : QOpenGLWidget(parent)
{

}

void myOpenglWidget::initializeGL()
{
    initializeOpenGLFunctions();
    glClearColor(1.0, 1.0, 1.0,1.0);
}

void myOpenglWidget::resizeGL(int w, int h)
{
    glViewport(0, 0, (GLsizei)w, (GLsizei)h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(-1.5,1.5,-1.5,1.5);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

void myOpenglWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPointSize(10.0);
    glColor3d(1.0,0.0,0.0);
    glBegin(GL_POINTS);
    glVertex3d(0.0, 0.0, 0.0);
    glEnd();
}

main.cpp

#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MainWindow w;
    w.show();

    return a.exec();
}

在ui文件中創建QOpenGLWidget並將其提升爲myOpenglWidget,編譯上述代碼並執行發現背景顏色可以更改,但是中心的紅點無法顯示。

解決辦法

在initializeGL函數中添加opengl版本檢查

cout<<glGetString(GL_VERSION)<<endl;

運行程序輸出結果爲

OpenGL ES 2.0 (ANGLE 2.1.0.8613f4946861)

這就可以發現問題所在,程序直接去調用了OpenGL ES庫,而在OpenGL ES庫中是不支持glBegin()等函數的,所以我們需要讓程序去連接到OpenGL庫,這其實也很簡單,在mian.cpp調用QApplication之前設置使用OpenGL庫的屬性,即:

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL);

    QApplication a(argc, argv);

    MainWindow w;
    w.show();

    return a.exec();
}
發佈了47 篇原創文章 · 獲贊 63 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章