QT の OpenGLWidget

1. 生成された UI で、コントロール OpenGL Widget を通じて対応するスペースを配置します (後で、プロモートされたウィジェットを通じてこのコントロールを派生 OpenGLWidget にバインドします)

 

2. QOpenGLWidget、QOpenGLFunctions_*_*_Core から派生したウィジェット クラスを追加します (* はバージョン番号を表します)

QOpenGLWidget および QOpenGLFunctions_*_*_Core から継承したクラスは、virtual void initializeGL(); virtual void raiseGL(int w, int h); virtual void PainGL(); 3 つの関数をオーバーロードする必要があります。

#include <QOpenGLWidget>
#include <QOpenGLFunctions_3_3_Core>
class AXBOpenGLWidget : public QOpenGLWidget, QOpenGLFunctions_3_3_Core

オーバーロードのinitializeGL()、paintGL()、resizeGL(int w, int h)

#ifndef AXBOPENGLWIDGET_H
#define AXBOPENGLWIDGET_H

#include <QOpenGLWidget>
#include <QOpenGLFunctions_3_3_Core>

class AXBOpenGLWidget : public QOpenGLWidget, QOpenGLFunctions_3_3_Core
{
    Q_OBJECT
public:
    explicit AXBOpenGLWidget(QWidget *parent = nullptr);

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

signals:

};

#endif // AXBOPENGLWIDGET_H

InitializeGL() 関数で基本的な初期化を実行します。

まず、バックグラウンド関数の簡単な変更を実装します。

#include "axbopenglwidget.h"
AXBOpenGLWidget::AXBOpenGLWidget(QWidget *parent) : QOpenGLWidget(parent)
{
}
void AXBOpenGLWidget::initializeGL()
{
initializeOpenGLFunctions();
}
void AXBOpenGLWidget::resizeGL(int w, int h)
{
//glViewport(0,0,w,h);
}
void AXBOpenGLWidget::paintGL()
{
glClearColor(0.2f,0.3f,0.3f,1.0f);
glClear(GL_COLOR_BUFFER_BIT);
}

 レンダリング:

 

注1:

InitializeGLでinitializeOpenGLFunctions()が呼び出されないと次の問題が発生します。

 

2. 未使用のパラメータ「w」などの黄色の三角形を表示したくない場合は、Q_UNUSED() を使用して回避できます。

Q_UNUSED(w)
Q_UNUSED(h)

3. 右側の黄色の警告を消すには、次の方法でも行うことができます。

画面の左上隅にある Qt Cretor - プラグインについて - 名前 - c++: ClangcodeModel をクリックし、この列のチェックマークを解除します ✔️ その後、Qt Cretor を再起動します。再度開いた後、問題はありません

 

この記事は Blog Garden (unicornsir) から転載しました: OpenGLWidget in QT - unicornsir - Blog Garden

おすすめ

転載: blog.csdn.net/QtCompany/article/details/132119550