欢迎访问宙启技术站
智能推送

使用QOpenGLWidget()实现2D图形绘制

发布时间:2024-01-02 10:12:25

QOpenGLWidget 是一个方便的类,它继承自 QWidget,并为 OpenGL 绘图提供了一个基本的窗口。

下面是一个简单的例子,展示如何使用 QOpenGLWidget 绘制一个简单的 2D 图形。首先,我们需要在程序的主窗口中添加一个 QOpenGLWidget。

from PyQt5.QtWidgets import QApplication, QMainWindow, QOpenGLWidget
from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtCore import Qt
import sys


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 创建一个 OpenGL 窗口
        self.opengl_widget = MyOpenGLWidget(self)
        self.setCentralWidget(self.opengl_widget)

        self.setGeometry(100, 100, 800, 600)
        self.setWindowTitle("2D 绘制")
        self.show()


class MyOpenGLWidget(QOpenGLWidget):
    def __init__(self, parent):
        super().__init__(parent)

    def paintEvent(self, event):
        painter = QPainter(self)

        # 设置画笔颜色为红色
        painter.setPen(QColor(255, 0, 0))

        # 设置绘制矩形的填充颜色为绿色
        painter.setBrush(QColor(0, 255, 0))

        # 绘制一个矩形
        painter.drawRect(20, 20, 100, 100)

        # 绘制一个圆形
        painter.drawEllipse(150, 20, 100, 100)

        # 设置画笔颜色为蓝色
        painter.setPen(QColor(0, 0, 255))

        # 绘制一条直线
        painter.drawLine(20, 150, 250, 150)

        # 绘制一条斜线
        painter.drawLine(20, 200, 200, 250)

    def resizeEvent(self, event):
        self.update()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())

在上述代码中,我们创建了一个主窗口类 MainWindow,并将一个自定义的 QOpenGLWidget 类(MyOpenGLWidget)作为中央窗口部件。QOpenGLWidget 的 paintEvent 函数被重写,用于绘制图形。

在 paintEvent 函数中,我们首先创建一个 QPainter 对象,指定对应的绘图设备为 self。然后,我们使用 setPen 方法设置画笔的颜色,使用 setBrush 方法设置绘制矩形时的填充颜色。接着,我们使用 drawRect、drawEllipse 和 drawLine 方法分别绘制了一个矩形、一个圆形和两条直线。

最后,我们在主函数中创建了一个 QApplication 对象和一个 MainWindow 对象,并启动应用程序。

运行程序后,将会出现一个包含绘制的图形的窗口。