以下是一个简单的示例代码,它继承了 QOpenGLFunctions_4_0_Core,并在窗口上使用 OpenGL 绘制了 “Hello World” 文本。
#include <QOpenGLFunctions_4_0_Core>
#include <QOpenGLWidget>
#include <QPainter>
class OpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions_4_0_Core
{
public:
OpenGLWidget(QWidget* parent = nullptr) : QOpenGLWidget(parent)
{
}
protected:
void initializeGL() override
{
// 初始化 OpenGL 函数
initializeOpenGLFunctions();
}
void paintGL() override
{
// 清除背景色
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// 设置绘制颜色和字体
glColor3f(1.0f, 1.0f, 1.0f);
QFont font("Arial", 24);
// 使用 QPainter 在 OpenGL 上下文中绘制文本
QPainter painter(this);
painter.beginNativePainting();
glPushAttrib(GL_ALL_ATTRIB_BITS);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0, width(), height(), 0, -1, 1);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
painter.setFont(font);
painter.drawText(20, 50, "Hello World");
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopAttrib();
painter.endNativePainting();
}
};
在主函数中,创建该类的实例,将其添加到主窗口中。
#include <QApplication>
#include <QMainWindow>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow mainWindow;
OpenGLWidget openGLWidget(&mainWindow);
mainWindow.setCentralWidget(&openGLWidget);
mainWindow.show();
return a.exec();
}