Qt中的 QGraphicsScene QGraphicsView之间的关系

简单的说,view像一台摄像机,scene提供了内容。

一个窗口中可以有多台摄像机来浏览scene 中的内容。也可以用两台摄像机查看两个scene中的内容。

上面代码定义了两个view来观察场景中的内容。

 QGraphicsScene *s1 = new QGraphicsScene(this);
    s1->addLine(10, 10, 300, 300);

    QGraphicsScene *s2=new QGraphicsScene(this);
    s2->addEllipse(20,50,150,120);

    QGraphicsView *v1 = new QGraphicsView(this);
    v1->setScene(s1);
    v1->setRenderHint(QPainter::Antialiasing);
    v1->move(0,50);
    v1->resize(200,200);
    v1->setWindowTitle("Graphics View");
    v1->show();

    QGraphicsView *v2=new QGraphicsView(this);
    v2->setScene(s2);
    v2->setRenderHint(QPainter::Antialiasing);
    v2->move(210,50);
    v2->resize(200,200);
    v2->show();

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、付费专栏及课程。

余额充值