我可以为自己定制画笔样式吗?

3

以下是QBrush预定义的一些样式。我想知道是否有机会按照自己的意愿自定义一个样式。
谢谢。

enter image description here

1个回答

3

您需要创建一个代表模式的QPixmap,并将其设置为QBrush的纹理:

import sys

from PyQt5 import QtCore, QtGui, QtWidgets


def create_texture():
    pixmap = QtGui.QPixmap(QtCore.QSize(8, 8))
    pixmap.fill(QtGui.QColor("red"))

    painter = QtGui.QPainter(pixmap)
    painter.setBrush(QtGui.QBrush(QtGui.QColor("blue")))
    painter.drawEllipse(pixmap.rect())
    painter.end()

    return pixmap


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)

    texture = create_texture()
    brush = QtGui.QBrush()
    brush.setTexture(texture)

    scene = QtWidgets.QGraphicsScene()
    view = QtWidgets.QGraphicsView(scene)

    it = scene.addRect(QtCore.QRectF(0, 0, 400, 400))
    it.setBrush(brush)

    view.resize(640, 480)
    view.show()

    sys.exit(app.exec_())

在此输入图片描述

或者QImage:

import sys

from PyQt5 import QtCore, QtGui, QtWidgets


def create_texture():
    image = QtGui.QImage(QtCore.QSize(8, 8), QtGui.QImage.Format_ARGB32)
    image.fill(QtGui.QColor("red"))

    painter = QtGui.QPainter(image)
    painter.setBrush(QtGui.QBrush(QtGui.QColor("blue")))
    painter.drawEllipse(image.rect())
    painter.end()

    return image


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)

    texture = create_texture()
    brush = QtGui.QBrush()
    brush.setTextureImage(texture)

    scene = QtWidgets.QGraphicsScene()
    view = QtWidgets.QGraphicsView(scene)

    it = scene.addRect(QtCore.QRectF(0, 0, 400, 400))
    it.setBrush(brush)

    view.resize(640, 480)
    view.show()

    sys.exit(app.exec_())

谢谢。太酷了。 我正在参与一个凝视依赖显示项目,我想自定义一个模糊样式的Qbrush。 我尝试使用QGraphicsBlurEffect来实现我的目的,但是当将QGraphicsBlurEffect应用于巨大的QGraphicsEllipseItem(圆形,半径> 2500px)时,渲染延迟变得明显,我已经测试了QGraphicsBlurEffect对相对较小的QGraphicsItem,它工作良好。 所以我想定义自己的模糊样式Qbrush,有什么想法吗? 谢谢。 - M conrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接