当前位置: 首页 > wzjs >正文

余姚响应式网站建设黑帽seo技术有哪些

余姚响应式网站建设,黑帽seo技术有哪些,学做网站要多少钱,做网站在阿里云买什么一、概述 QGraphicsView 和 QGraphicsScene 是 Qt 图形视图框架的核心类,用于构建高性能、可交互的 2D 图形界面。 核心分工: QGraphicsScene:管理场景中的图形项(QGraphicsItem),处理事件和坐标系统。QG…
一、概述

QGraphicsViewQGraphicsScene 是 Qt 图形视图框架的核心类,用于构建高性能、可交互的 2D 图形界面。
核心分工

  • QGraphicsScene:管理场景中的图形项(QGraphicsItem),处理事件和坐标系统。
  • QGraphicsView:作为观察场景的视口,提供缩放、平移、旋转等视图变换功能。

适用场景

  • 复杂绘图(如 CAD 工具)
  • 游戏开发(2D 场景)
  • 数据可视化(图表、流程图)
  • 交互式图形界面(可拖拽、编辑的组件)

二、核心组件与关系
  1. 组件层级

    QGraphicsView (视图)└── QGraphicsScene (场景)└── QGraphicsItem (图形项:矩形、椭圆、文本、自定义项等)
    
  2. 坐标系差异

    • 场景坐标:场景的全局坐标系(原点在场景中心或自定义位置)。
    • 视图坐标:视图窗口的坐标系(原点在左上角)。
    • 项坐标:每个图形项自身的局部坐标系。

三、基础使用步骤
  1. 创建场景与视图

    from PyQt6.QtWidgets import QGraphicsView, QGraphicsScene, QApplication
    from PyQt6.QtCore import Qtscene = QGraphicsScene()  # 创建场景
    view = QGraphicsView(scene)  # 创建视图并绑定场景
    view.setRenderHint(QPainter.RenderHint.Antialiasing)  # 抗锯齿
    view.resize(800, 600)
    view.show()
    
  2. 添加图形项到场景

    # 添加矩形(位置、大小、颜色)
    rect = scene.addRect(0, 0, 100, 50, Qt.GlobalColor.red, Qt.GlobalColor.blue)# 添加文本
    text = scene.addText("Hello Graphics", QFont("Arial", 12))
    text.setPos(50, 50)# 添加椭圆
    ellipse = scene.addEllipse(200, 100, 80, 60, Qt.GlobalColor.green)
    

四、核心功能与实战案例
  1. 交互式图形项(拖拽、旋转)

    class MovableRect(QGraphicsRectItem):def __init__(self, x, y, w, h):super().__init__(x, y, w, h)self.setFlag(QGraphicsItem.GraphicsItemFlag.ItemIsMovable)  # 允许拖拽self.setFlag(QGraphicsItem.GraphicsItemFlag.ItemIsSelectable)  # 允许选中self.setBrush(Qt.GlobalColor.cyan)# 添加可移动矩形到场景
    movable_rect = MovableRect(300, 200, 80, 40)
    scene.addItem(movable_rect)
    
  2. 视图操作(缩放与平移)

    # 鼠标滚轮缩放
    def wheelEvent(self, event):factor = 1.2 if event.angleDelta().y() > 0 else 0.8self.scale(factor, factor)# 右键拖拽平移
    view.setDragMode(QGraphicsView.DragMode.ScrollHandDrag)  # 设置拖拽模式
    
  3. 自定义图形项(绘制箭头)

    class ArrowItem(QGraphicsItem):def boundingRect(self):return QRectF(-10, -5, 20, 10)  # 定义项边界def paint(self, painter, option, widget):painter.setPen(QPen(Qt.GlobalColor.black, 2))painter.drawLine(0, 0, 10, 0)  # 箭头主体painter.drawLine(10, 0, 5, -5)  # 箭头尖端painter.drawLine(10, 0, 5, 5)arrow = ArrowItem()
    arrow.setPos(400, 300)
    scene.addItem(arrow)
    
  4. 动画与图形项结合

    # 使用 QPropertyAnimation 移动图形项
    from PyQt6.QtCore import QPropertyAnimationanim = QPropertyAnimation(arrow, b"pos")
    anim.setDuration(2000)
    anim.setStartValue(QPointF(400, 300))
    anim.setEndValue(QPointF(500, 400))
    anim.setEasingCurve(QEasingCurve.Type.InOutQuad)
    anim.start()
    

五、高级功能
  1. 碰撞检测

    # 检测矩形与其他项的碰撞
    colliding_items = rect.collidingItems()
    for item in colliding_items:item.setBrush(Qt.GlobalColor.yellow)  # 高亮碰撞项
    
  2. 组合项(QGraphicsItemGroup)

    group = QGraphicsItemGroup()
    group.addToGroup(rect)
    group.addToGroup(text)
    group.setRotation(45)  # 整体旋转 45 度
    scene.addItem(group)
    
  3. 场景事件处理

    class CustomScene(QGraphicsScene):def mousePressEvent(self, event):if event.button() == Qt.MouseButton.LeftButton:print(f"Scene 点击位置:{event.scenePos()}")super().mousePressEvent(event)
    

六、注意事项
  1. 性能优化

    • 避免在场景中放置过多项(超过数千个)。
    • 使用 QGraphicsItem.ItemClipsToShapesetCacheMode 优化渲染。
  2. 坐标转换

    • 使用 mapToScene()mapFromScene() 在视图、场景、项之间转换坐标。
    # 将视图坐标 (100, 200) 转换为场景坐标
    scene_pos = view.mapToScene(100, 200)
    
  3. 内存管理

    • 删除图形项时需调用 removeItem(),避免内存泄漏。
    scene.removeItem(rect)
    del rect  # 显式删除对象
    

七、综合案例:简易绘图工具
class DrawingScene(QGraphicsScene):def __init__(self):super().__init__()self.current_item = Nonedef mousePressEvent(self, event):if event.button() == Qt.MouseButton.LeftButton:self.current_item = QGraphicsEllipseItem()self.current_item.setRect(event.scenePos().x(), event.scenePos().y(), 0, 0)self.addItem(self.current_item)def mouseMoveEvent(self, event):if self.current_item:start_pos = event.buttonDownScenePos(Qt.MouseButton.LeftButton)current_pos = event.scenePos()self.current_item.setRect(start_pos.x(), start_pos.y(),current_pos.x() - start_pos.x(),current_pos.y() - start_pos.y())def mouseReleaseEvent(self, event):self.current_item = None# 使用示例
app = QApplication([])
scene = DrawingScene()
view = QGraphicsView(scene)
view.show()
app.exec()

八、总结

QGraphicsView 和 QGraphicsScene 为复杂图形应用提供了强大支持,通过组合图形项、处理事件和优化渲染,可实现高度定制化的交互式界面。开发时需重点关注坐标系统、性能管理和用户交互逻辑。

http://www.dtcms.com/wzjs/386556.html

相关文章:

  • 西安网站建设小红书网络营销策划方案
  • 网站建设贰金手指下拉贰壹2023年8月新冠疫情
  • 网站页头制作萝卜建站
  • 在马来西亚做博彩网站合法吗公司网站设计公司
  • 服装网上商城网站建设报告百度一下浏览器下载安装
  • 金牛区建设和交通局网站个人博客网页设计
  • 网站版心怎么做seo做的好的网站
  • 大连网站建设哪家好安康seo
  • 做平面设计都在那个网站找免费素材百度首页的ip地址
  • 网站建设 繁体免费搭建自己的网站
  • 装潢设计图片三室一厅郑州关键词优化平台
  • 微信网页制作网站建设网站流量排行
  • 税务局网站公司实名制怎么做怎么做关键词排名靠前
  • 外贸网站建设公司价位软文编辑器
  • 天河做网站设计视频号怎么付费推广
  • 秦皇岛高端网站设计百度收录提交
  • 建设一个网站的好处大数据培训机构排名前十
  • 企业电子商务网站设计的原则网络营销软文范例300字
  • 网站开发如何记账西地那非片吃了能延时多久
  • 章丘做网站互联网广告公司
  • 网站优化外链怎么做竞价推广账户托管费用
  • 网站建设与管理的展望与未来北京、广州最新发布
  • fullpage网站济南seo整站优化价格
  • 婚庆公司网站建设策划书.doc万能bt搜索引擎
  • 厦门做网站公司谷歌自然排名优化
  • 网站开发保障合同dw友情链接怎么设置
  • 网站建设公司工资标准线上销售怎么做
  • 美食网站要怎么做百度推广售后服务电话
  • 网站统计代码怎么弄互联网宣传推广
  • 做店标 做店招的网站天津百度推广网络科技公司