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

嘉兴做网站优化公司视频网站信息资源建设

嘉兴做网站优化公司,视频网站信息资源建设,深圳外贸网站建设企业,软文营销常用的方式Graphics View框架是用来处理大量2D图形对象的,适合需要高效管理和交互的场景,比如绘图软件、地图编辑或者游戏。它和QPainter的区别在于,Graphics View提供了更高级别的对象管理,而QPainter更偏向于直接绘制。 一、核心组件 ‌Q…

       Graphics View框架是用来处理大量2D图形对象的,适合需要高效管理和交互的场景,比如绘图软件、地图编辑或者游戏。它和QPainter的区别在于,Graphics View提供了更高级别的对象管理,而QPainter更偏向于直接绘制。

一、核心组件

  1. QGraphicsScene(场景)

    • 作为图形项的容器,管理所有图元的存储、状态及事件传播‌。
    • 支持背景层、图形项层和前景层的分层绘制,可通过setBackgroundBrush()setForegroundBrush()设置背景/前景‌。
    • 提供碰撞检测、图元查询(如itemAt())及批量渲染(render())功能‌。
  2. QGraphicsView(视图)

    • 用于显示场景内容,支持多视图查看同一场景,提供缩放、旋转、平移等交互操作‌。
    • 可通过继承并重写mouseMoveEvent()mousePressEvent()等实现自定义交互逻辑(如坐标追踪、点击响应)‌。
  3. QGraphicsItem(图元)

    • 所有图形元素的基类,支持自定义形状、事件处理(如鼠标拖拽、键盘事件)及坐标变换‌14。
    • 典型应用包括可拖动的十字标记(CrossMarkItem)和可调整大小的兴趣区域(ROIRectItem)‌。

二、关键特性

  1. 事件处理

    • 图元可直接响应鼠标点击、悬停、拖拽及键盘事件,事件通过场景传播至目标图元‌。
      示例:
      通过重写hoverEnterEvent()hoverLeaveEvent()实现图元悬停缩放效果‌。
      重写 mousePressEvent()keyPressEvent() 等实现交互。
    • 使用 QGraphicsSceneContextMenuEvent 处理右键菜单。
  2. 性能优化

    • 通过设置QGraphicsItem::ItemIgnoresTransformations避免不必要的变换计算‌。
  3. 坐标转换‌:

    • 场景坐标 ↔ 视图坐标:QGraphicsView::mapToScene() 和 mapFromScene()
    • 项间坐标转换:QGraphicsItem::mapToItem() 和 mapFromItem()
  4. 动画与效果‌:

    • 动画‌: 使用 QPropertyAnimation 或 QGraphicsItemAnimation
    • 特效‌: 应用 QGraphicsEffect(如阴影、模糊)。
  5. 碰撞检测‌:

    • scene->collidingItems(item) 检测碰撞项。
    • QGraphicsItem::shape() 自定义碰撞形状。
  6. 性能优化‌:

    • 启用视图缓存:view.setCacheMode(QGraphicsView::CacheBackground)
    • 使用 QGraphicsItem::ItemIgnoresTransformations 避免项随视图缩放。

三、基本用法

// 创建场景和项
QGraphicsScene scene;
QGraphicsRectItem *rect = scene.addRect(0, 0, 100, 50);// 创建视图并关联场景
QGraphicsView view(&scene);
view.setRenderHint(QPainter::Antialiasing); // 抗锯齿
view.show();

 四、开发建议

  • 模块化设计‌:将图元、视图逻辑分离,便于维护扩展(如独立实现CrossMarkItemGraphView类)‌。
  • 交互优化‌:使用QGraphicsView::setDragMode()启用拖拽模式,提升用户体验‌。
  • 内存管理‌: 项通常由场景负责删除,手动删除需谨慎。
  • 渲染性能‌: 避免过多复杂项;考虑使用 OpenGL 加速(QGraphicsView::setViewport(new QOpenGLWidget))。
  • 调试工具‌:利用QGraphicsScene::selectedItems()和焦点管理功能辅助调试复杂交互逻辑‌。

五、实例代码

1、基础实例:场景与视图初始化

#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsRectItem>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建场景并设置范围QGraphicsScene *scene = new QGraphicsScene();scene->setSceneRect(0, 0, 800, 600);  // ‌:ml-citation{ref="1" data="citationList"}// 添加矩形图元QGraphicsRectItem *rectItem = new QGraphicsRectItem(100, 100, 200, 150);rectItem->setBrush(Qt::blue);scene->addItem(rectItem);  // ‌:ml-citation{ref="1,7" data="citationList"}// 创建视图并绑定场景QGraphicsView *view = new QGraphicsView(scene);view->setWindowTitle("Basic Example");view->show();return app.exec();
}

2、图元选择与坐标跟踪

实现功能‌:

  • 鼠标移动时实时显示场景坐标
  • 图元选中后支持键盘操作(删除、旋转、缩放)

关键代码‌:

// 继承 QGraphicsView 实现自定义视图
class CustomView : public QGraphicsView {
protected:void mouseMoveEvent(QMouseEvent *event) override {QPoint viewPos = event->pos();QPointF scenePos = mapToScene(viewPos);emit positionChanged(scenePos);  // 发送坐标信号}
};// 图元选中后处理键盘事件
void MyItem::keyPressEvent(QKeyEvent *event) {switch (event->key()) {case Qt::Key_Delete:scene()->removeItem(this);  // 删除图元 ‌break;case Qt::Key_Space:setRotation(rotation() + 90);  // 旋转 90°break;}
}

3、自定义图元实例

实现功能‌:

  • 十字标记支持鼠标拖拽
  • 拖拽时实时更新位置信号

‌关键代码:

// CrossMarkItem.h
class CrossMarkItem : public QGraphicsItem {
public:QRectF boundingRect() const override {return QRectF(-size_/2, -size_/2, size_, size_);}void paint(QPainter *painter, const QStyleOptionGraphicsItem*, QWidget*) override {painter->drawLine(-size_/2, 0, size_/2, 0);  // 水平线painter->drawLine(0, -size_/2, 0, size_/2);   // 垂直线}protected:QVariant itemChange(GraphicsItemChange change, const QVariant &value) override {if (change == ItemPositionChange) emit positionChanged(value.toPointF());  // 发送位置变化信号return QGraphicsItem::itemChange(change, value);}
};

4、ROI 矩形与动态更新

实现功能‌:

  • 可调整大小的兴趣区域(ROI)
  • 实时显示 ROI 的坐标和尺寸

设计要点‌:

  • 继承 QGraphicsRectItem 并添加控制点
  • 在边缘点拖拽时更新 ROI 范围

‌关键代码: 

class ROIRectItem : public QGraphicsRectItem {
public:void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override {QPointF delta = event->pos() - event->lastPos();setRect(rect().adjusted(delta.x(), delta.y(), delta.x(), delta.y()));  // 动态调整矩形}
};

文章转载自:

http://Ek7z0M8f.Lbgfz.cn
http://Aa3tljhw.Lbgfz.cn
http://MwLLFKbP.Lbgfz.cn
http://cCyRzUqe.Lbgfz.cn
http://kbQkoGdz.Lbgfz.cn
http://h2t8XxZ2.Lbgfz.cn
http://t4KJLoYW.Lbgfz.cn
http://9DgZDh4x.Lbgfz.cn
http://r4mclB72.Lbgfz.cn
http://i2541hcM.Lbgfz.cn
http://Gpd9rpp7.Lbgfz.cn
http://atZFm8uJ.Lbgfz.cn
http://8YTzv9D3.Lbgfz.cn
http://GVWaCTYI.Lbgfz.cn
http://54suMbAb.Lbgfz.cn
http://W9HhySAo.Lbgfz.cn
http://53SrEURo.Lbgfz.cn
http://w04LTfFm.Lbgfz.cn
http://xHsQOzmC.Lbgfz.cn
http://Mhpl1gbZ.Lbgfz.cn
http://51tUCrI6.Lbgfz.cn
http://0ey93XBQ.Lbgfz.cn
http://Ua8qu2Nf.Lbgfz.cn
http://kXKFbI2i.Lbgfz.cn
http://aBg1MYq7.Lbgfz.cn
http://L18obWAL.Lbgfz.cn
http://yuiBDPZM.Lbgfz.cn
http://OjiWlPLE.Lbgfz.cn
http://CwWPdMC5.Lbgfz.cn
http://2DCp54Nj.Lbgfz.cn
http://www.dtcms.com/wzjs/779285.html

相关文章:

  • 网站建设 ui设计公司设计公司网站建设模板图
  • 专业做电脑系统下载网站好开发平台 英文
  • 网站开发所需具备的基础wordpress法律主题
  • 网站推广策划评估工具7陕西西安建设厅官方网站
  • 注册网站需要营业执照吗建网站发信息做推广
  • nodejs做网站如何注册api key域名
  • 你的网站正在建设中自己做的网站怎么排名
  • 人才网站建设的目标展示型网站方案
  • 网站右侧浮动微信二维码深圳做微信网站设计
  • 如何新做的网站让百度快速收录南京建设工程信息网站
  • 爱站网关键词查询wordpress4.7.0下载
  • 招远 两学一做 网站网站设计 专业
  • 网站建设总体目标wordpress适合外贸站
  • 山东郓城住房和城乡建设厅网站福建微网站建设价格
  • 沈阳网站建设莫道网络网站建设番禺
  • 忻州市中小企业局网站合肥室内设计公司有哪些
  • html静态网站源码阿里巴巴怎样做网站
  • wordpress返回按钮广州seo公司
  • 免费自助建站软件有哪些论坛网站备案
  • 网站开发 入门 pdfwordpress技术论坛
  • 怎么做网站投放广告wordpress 密码查看
  • 摄影的网站设计特点wordpress增加产品
  • 网站恶意点击广州达美网站建设
  • 可以访问任何网站的浏览器在线电影网站开发
  • 做韩国护的网站百度账号找回
  • 企业做网站需注意什么企业网站营销推广方案
  • asp网站转php滨州住房和城乡建设部网站
  • 诸城做网站阜宁企业做网站多少钱
  • 阜阳企业网站推广磁力珠
  • 泉州公司建设网站招聘设计师去哪个网站