QT图形视图框架——QGraphicsView/QGraphicsScene/QGraphicsItem

QT图形视图框架用于管理大量的2D图形项,由QGraphicsView、QGraphicsScene和QGraphicsItem组成。QGraphicsView负责将场景内容可视化并支持多视口;QGraphicsScene是图形项的容器,允许添加和检索图形项;QGraphicsItem是图形元素,包括标准项和自定义项。通过QGraphicsView设置视图的前景和背景,而QGraphicsScene的设置影响所有关联视图。自定义QGraphicsItem需要重写boundingRect()和paint()方法。
摘要由CSDN通过智能技术生成

图形视图框架

  • 功能:管理数量庞大的自定义2D图形项
  • 组成:视图(QGraphicsView)+场景(QGraphicsScene)+图形项(QGraphicsItem)

视图(QGraphicsView)

  • 功能:使场景中的内容可视化,可以连接多个视图到同一个场景来为相同的数据集提供多个视口。视图部件是可滚动的区域。
  • setDragMode()函数设置拖拽模式:QGraphicsView::ScrollHandDrag使光标变成手掌形状,从而可以拖动场景;QGraphicsView::RubberBandDrag使用鼠标拖出橡皮筋框来选择图形项
  • 默认提供一个QWidget作为视图部件,QGraphicsView.setViewport()设置视图,当定义多个视图对象时,调用show()函数会出现多个widget窗口。
  • 创建对象,把场景作为父窗口,用setxxx()函数设置一系列的属性
    QgraphicsView view(&scene);
    view.setForegroundBrush(QColor); //设置场景的前景色,类似于遮罩
    view.setBackgroundBrush(QPixmap); //设置场景的背景图片
    view.resize(); //视图的大小
    用QGraphicsView设置前景和背景时,只对当前视图有效,而用QGraphicsScene进行设置时,对所有在该场景中的视图都有效。

场景(QGraphicsScene)

  • 功能:图形项QGraphicsItem对象的容器,可以调用QGraphicsScene::a
QGraphicsViewQGraphicsSceneQt中用于2D图形显示交互的重要组件。下面是它们的基本使用教程: 1. 创建QGraphicsScene对象 ```cpp QGraphicsScene* scene = new QGraphicsScene(parent); ``` 2. 将图形元素添加到场景中 ```cpp QGraphicsItem* item = new QGraphicsItem(); scene->addItem(item); ``` 3. 创建QGraphicsView对象 ```cpp QGraphicsView* view = new QGraphicsView(scene, parent); ``` 4. 设置视图显示区域大小 ```cpp view->setFixedSize(width, height); ``` 5. 将视图添加到主窗口中 ```cpp layout->addWidget(view); ``` 6. 设置视图的缩放和平移 ```cpp view->setDragMode(QGraphicsView::ScrollHandDrag); //启用拖拽模式 view->setViewportUpdateMode(QGraphicsView::SmartViewportUpdate); //更新视图时,只更新可见区域 view->setRenderHint(QPainter::Antialiasing); //启用反锯齿 view->setOptimizationFlag(QGraphicsView::DontAdjustForAntialiasing); //不自适应反锯齿 view->setInteractive(true); //启用交互 //设置缩放 view->setRenderHint(QPainter::SmoothPixmapTransform); view->setResizeAnchor(QGraphicsView::AnchorUnderMouse); view->setTransformationAnchor(QGraphicsView::AnchorUnderMouse); //设置平移 view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ``` 7. 设置场景的背景 ```cpp scene->setBackgroundBrush(QBrush(Qt::white)); ``` 8. 设置图形元素的属性 ```cpp item->setPos(x, y); //设置元素在场景中的位置 item->setZValue(z); //设置元素的堆叠顺序 item->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); //设置元素的交互属性 ``` 9. 处理视图和场景的事件 ```cpp void MyView::mousePressEvent(QMouseEvent* event) { QGraphicsView::mousePressEvent(event); QPointF scenePos = mapToScene(event->pos()); //处理场景中的元素事件 } void MyScene::mousePressEvent(QGraphicsSceneMouseEvent* event) { QGraphicsScene::mousePressEvent(event); QGraphicsItem* item = itemAt(event->scenePos(), QTransform()); //处理元素事件 } ``` 以上是QGraphicsViewQGraphicsScene的基本使用教程,可以根据实际需求进行进一步的开发和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值