一、图形视图框架结构

  图形视图框架由场景QGraphicsScene、视图QGraphicsView、图形项QGraphicsItem组成,它提供了一套基于图形项模型视图编程方法。图形视图框架可以管理数量庞大的自定义2D图形项,比如要绘制上万个图形并对这些图形进行拖动、检测位置等操作的话使用图形视图框架就可以方便的管理它们。场景中可以包含各种形状的图形项,使用视图来使图形项可视化,多个视图可以在一个场景中查看。视图还支持缩放和旋转,使用视图的变换矩阵函数QGraphicsView::transfrom()可以变换场景的坐标系统,这样便可以实现缩放、旋转等功能。

   《QT Creator快速入门》第十一章(一):图形视图

  场景是图形项的容器,场景提供了管理大量图形项的快速接口,并传播事件给图形项和管理图形项的状态(选择、焦点处理等)。为场景设置视图后才可以看到图形项,视图部件是一个可滚动的区域,默认QGraphicsView提供了一个QWidget作为视口部件,如果要使用OpenGL进行渲染可以调用setViewport()设置QGLWidget作为视口。场景可以分为图形项层、前景层、背景层,场景的 绘制总是从背景开始、最后是前景,前景和背景还可以使用渐变和贴图等来实现特殊效果,比如半透明的黑色可以实现夜幕降临的效果。场景中也有跟视图同名的设置前景、背景的方法,不过它对所有关联的视图都有效。

#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsRectItem>
#include <QDebug>

int main(int argc, char**argv)
{
    QApplication app(argc, argv);

    QGraphicsScene scene; //创建场景
    QGraphicsRectItem* item = new QGraphicsRectItem(0, 0, 100, 100); //创建矩形图形项
    scene.addItem(item); //添加矩形图形项到场景

    QList<QGraphicsItem *> l = scene.items(); //获得场景中所有的图形项(递减顺序,最上面的图形项在前面)
    l = scene.items(Qt::AscendingOrder); //获得场景中所有的图形项,增序
    QGraphicsItem* pItem = scene.itemAt(50, 50); //获得(50, 50)点处的图形项
    qDebug() << pItem;
    QPainterPath path;
    path.addRect(0, 0, 200, 200);
    scene.setSelectionArea(path); //选择区域中所有的图形项
    scene.setFocusItem(pItem); //设置图形项焦点
    //scene.removeItem(pItem); //删除图形项

    QGraphicsView view(&scene); //为场景创建视图
    view.setDragMode(QGraphicsView::ScrollHandDrag); //设置光标变为手掌形状从而可以拖动场景
    view.setDragMode(QGraphicsView::RubberBandDrag); //设置可以使用鼠标拖出橡皮筋来选择图形项
    view.setForegroundBrush(QColor(255, 255, 255, 100)); //设置场景的前景色
    view.setBackgroundBrush(QPixmap("./background.png")); //设置场景的背景图片
    view.resize(500, 400); //设置视图大小
    view.show(); //显示视图

    return app.exec();
}
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-20
  • 2022-12-23
  • 2021-07-22
  • 2021-06-16
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-24
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案