0)環境
Ubuntu 20.04
Qt5
GCC 9
GDB
1)Qtのプロジェクト生成する。
このとき、ビルド条件はCMAKEを利用する。
2) 生成されたQtのプロジェクトをビルドする
ここは、特に何もくビルドできるはず。何も問題がなければ空のWindowが立ち上がる。
3)自己定義のGLwigetのクラスを定義する。
これは、この辺のページが参考になる。
glwidget.h
#ifndef GLWIDGET_H
#define GLWIDGET_H
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
#include <QColor>
#include <QOpenGLFunctions_1_0>
class GLWidget : public QOpenGLWidget, public QOpenGLFunctions
{
Q_OBJECT
public:
explicit GLWidget(QWidget *parent = nullptr);
virtual ~GLWidget();
void initializeGL();
void paintGL();
void resizeGL(int w, int h);
signals:
public slots:
};
#endif // GLWIDGET_H
"glwidget.cpp"
#include "glwidget.h"
GLWidget::GLWidget(QWidget *parent) : QOpenGLWidget(parent)
{
}
GLWidget::~GLWidget()
{
}
void GLWidget::initializeGL()
{
initializeOpenGLFunctions();
glClearColor(0.1, 0.1, 0.1, 1);
}
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin ( GL_TRIANGLES );
glColor3f ( 1.0 , 0.0 , 0.0 );
glVertex3f (- 0.5 , - 0.5 , 0 );
glColor3f ( 0.0 , 1.0 , 0.0 );
glVertex3f ( 0.5 , - 0.5 , 0 );
glColor3f ( 0.0 , 0.0 , 1.0 );
glVertex3f ( 0.0 , 0.5 , 0 );
glEnd ();
}
void GLWidget::resizeGL(int w, int h)
{
Q_UNUSED(w)
Q_UNUSED(h)
}
4) Uiファイル編集にて、配置したQWidgetかOpenGLWidgetのオブジェクトに自己定義のウィジェットを設定。
・QWidgetかOpenGLWidgetを配置する
・QOpenGLWidgetの「promoted widget(格上げされたウィジェット)」にて、自己定義のクラス格上げする。
5) CMakeのビルド条件を追加する。
これが追加部分
find_package(Qt5 COMPONENTS Widgets REQUIRED)
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
target_link_libraries(QtTestOpenGL PRIVATE Qt5::Widgets ${OPENGL_LIBRARIES} ${GLUT_LIBRARY})
6) ビルドすればトライアングルが表示される
参考 CmakeLists.txt
CmakeLists.txt を載せておく。
cmake_minimum_required(VERSION 3.5)
project(QtTestOpenGL LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
add_executable(QtTestOpenGL
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
glwidget.cpp
glwidget.h
)
target_link_libraries(QtTestOpenGL PRIVATE Qt5::Widgets ${OPENGL_LIBRARIES} ${GLUT_LIBRARY})