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