对QT 中QGraphicsView QGraphicsScene QGraphicsItem的初步理解

QGraphicsView用来显示一个滚动视图区的QGraphicsScene内容。QGraphicsScene提供了QGraphicsItem的容器功能。通常与QGraphicsView一起使用来描述可视化图形项目。

 

QGraphicsScene提供了一个视图的场景,通过在这样一个场景之上加入不同的QGraphicsItem来构建视图。而QGraphicsView则提供了一个widget来显示QGraphicsScene的内容。


(QGraphicsView提供了视图部件,它将可视化场景中的内容显示出来,QGraphicsScene则用来构建一个场景来显示场景中的元素,用方法:addItem(QGraphicsItem * item)则可以在场景中添加元素。

可以这样简单的理解 QGraphicsScene 和QGraphicsView 的关系:

QGraphicsScene *scene; //新建一个可视化场景
QGraphicsView *view = new QGraphicsView( scene,this );//用来显示新建立的场景
QPixmap *pixmap = new QPixmap("xxx.png");
scene->addPixmap(pixmap );//此处添加的是pixmap,也可以是QGraphicsItem的对象
view->show(); 
刚开始学习QT惯于视图和场景的内容,以上内容基于项目的代码研究和网络参考,可能有误,谨慎参考,后续还会继续修改。

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的基本使用教程,可以根据实际需求进行进一步的开发和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值