QGraphicsView绘画曲线注意点(三)

目的:

基于QGraphicsView绘画曲线之双缓冲机制,减少线在一直绘画过程中出现卡顿, 刷新慢的问题,同时在在绘曲线过程中出现实时出现反锯齿。

知识点:

在图形图象处理编程过程中,双缓冲是一种基本的技术。
双缓冲实现过程如下:
1、在内存中创建与画布一致的缓冲区
2、在缓冲区画图
3、将缓冲区位图拷贝到当前画布上
4、释放临时内存缓冲区

引用双缓冲机制原因是:

进行复杂的图形处理时或者大量处理某个图像,那么窗体在重绘时由于过频的刷新而引起闪烁或者卡顿现象。解决这一问题的有效方法就是双缓冲技术

双缓冲机制:

个人看法:主要是避免大量数据被刷新、处理或者数据输出与输出在处理过程中速度不协调。特意利用临时缓冲区,保存数据,进行缓冲,然后达到某种条件取出。

QGraphicsView绘画曲线注意点(二)
细节点:
1、画布(QImage)要填充QGraphicsVItem(设置大小),
2、当某个曲线绘画完后,注意QPainterPath调用moveTo()移动到适当某个点,不然QPainter在drawPath()默认是是从QPointF(0,0)为起点绘画曲线。
3、在实现QPainter调用drawPath()时,如果不清空,它会每次都要把加入路径的path重新绘画一遍,所以在长时间绘画曲线时应该考虑要适当清空QPainterPath(&= QpainterPath()),因为它没有清空api。
4、QPainter 它本身需要绑定设备,才能实现在设备上进行绘画。有两种绑定方式。
4.1 QPainter painter(QPaintDevice *device)构造中设置
4.2 QPainter painter。 painter.begin(QPaintDevice *device)这种方式需要注意一旦调用begin,所有的QPainter 设置比如setPen(), setBrush() 等等都得重新设置为默认值。并且一般与end()成对。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您可以通过继承 QGraphicsItem 类来实现自定义的多边形绘制。具体步骤如下: 1. 定义一个类继承自 QGraphicsItem,例如 MyPolygonItem。 2. 在 MyPolygonItem 中重载 boundingRect() 函数,返回多边形的包围盒。 3. 在 MyPolygonItem 中重载 paint() 函数,使用 QPainter 绘制多边形。 4. 在 QGraphicsView 中创建 MyPolygonItem 对象,并将其添加到场景中。 5. 在 QGraphicsView 中调用 fitInView() 函数,将多边形显示在视图中心。 以下是一个简单的示例代码: ```python from PyQt5.QtCore import Qt, QRectF from PyQt5.QtGui import QBrush, QColor, QPainter, QPolygonF from PyQt5.QtWidgets import QGraphicsItem, QGraphicsView, QGraphicsScene, QApplication class MyPolygonItem(QGraphicsItem): def __init__(self, polygon): super().__init__() self.polygon = polygon def boundingRect(self): return self.polygon.boundingRect() def paint(self, painter, option, widget): brush = QBrush(QColor(255, 0, 0, 128)) painter.setBrush(brush) painter.drawPolygon(self.polygon) if __name__ == '__main__': app = QApplication([]) view = QGraphicsView() scene = QGraphicsScene() view.setScene(scene) polygon = QPolygonF([(-50, -50), (0, -100), (50, -50), (100, 0), (50, 50), (0, 100), (-50, 50), (-100, 0)]) item = MyPolygonItem(polygon) scene.addItem(item) view.fitInView(item, Qt.KeepAspectRatio) view.show() app.exec_() ``` 运行以上代码,将会在窗口中显示一个八边形。您可以根据需要修改多边形的顶坐标来绘制不同形状的多边形。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道阻且长,行则降至

无聊,打赏求刺激而已

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值