[学习][笔记] qt5 从入门到入坟:<12>Graphics View Framework

简介: [学习][笔记] qt5 从入门到入坟:<12>Graphics View Framework

Graphics View Framework

Qt 学习之路 2(30):Graphics View Framework

GraphicsView和QPainter的区别

QPainter:面向过程。

使用QPainter绘图,大多是采用一种面向过程的描述方式:首先使用drawLine()画一条直线,然后使用drawPolygon()画一个多边形。

GraphicsView:面向对象。

对于 Graphics View,相同的过程可以是,首先创建一个场景(scene),然后创建一个直线对象和一个多边形对象,再使用场景的add()函数,将直线和多边形添加到场景中,最后通过视图进行观察,就可以看到了。

GraphicsView使用

Graphics View 提供了QGraphicsScene作为场景,即是允许我们添加图形的空间,相当于整个世界;QGraphicsView作为视口,也就是我们的观察窗口,相当于照相机的取景框,这个取景框可以覆盖整个场景,也可以是场景的一部分;QGraphicsItem作为图形元件,以便添加到场景中去,Qt 内置了很多图形,比如直线、多边形等,它们都是继承自QGraphicsItem。

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QGraphicsScene scene;
    scene.addLine(0, 0, 150, 150);
    QGraphicsView view(&scene);
    view.setWindowTitle("Graphics View");
    view.resize(500, 500);
    view.show();
    return app.exec();
}

段代码很简单:

首先创建一个场景,也就是QGraphicsScene对象。然后我们使用addLine()函数向场景中添加了一个直线,起始点和终点坐标分别是 (0, 0) 和 (150, 150)。可以想象,这是一个边长 150px 的正方形的对角线。通过这两步,我们已经有了场景和元素。之后,我们创建一个GraphicsView对象,绑定到一个场景上(也就是我们前面创建的 scene 对象)。注意,QGraphicsScene不是QWidget的子类,因此该构造函数并不是调用的QGraphicsView(QWidget *parent)。

接下来,我们可以运行一下代码:

int main(int argc, char *argv[])
{
      QApplication app(argc, argv);
       QGraphicsScene scene;
       scene.setSceneRect(0, 0, 300, 300);
       scene.addLine(0, 0, 150, 150);
       QGraphicsView view(&scene);
       view.setWindowTitle("Graphics View");
       // view.resize(500, 500);
       view.show();
       return app.exec();
}

sceneRect属性供QGraphicsView确定视图默认的滚动条区域.

去掉view.resize()一行,是因为我们让系统去决定视图的最小尺寸(否则的话,我们需要手动将窗口标题栏等的大小同时考虑设置)。

总结


相关文章
|
2月前
|
Web App开发 编解码 安全
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
168 4
|
3月前
|
数据挖掘 C++
QT基础入门——项目案例(七)
QT基础入门——项目案例(七)
97 0
QT基础入门——项目案例(七)
|
3月前
|
API
QT基础入门——Qt事件(五)
QT基础入门——Qt事件(五)
54 0
QT基础入门——Qt事件(五)
|
3月前
|
Unix Java Linux
QT基础入门——认识与创建QT(一)
QT基础入门——认识与创建QT(一)
62 0
QT基础入门——认识与创建QT(一)
|
2月前
|
Linux 编译器 API
探索Qt图像处理的奥秘:从入门到精通
探索Qt图像处理的奥秘:从入门到精通
85 2
|
2月前
|
SQL 存储 关系型数据库
【C/C++ 应用开发 数据库】入门 Qt数据库编程:从基本操作到高级技巧
【C/C++ 应用开发 数据库】入门 Qt数据库编程:从基本操作到高级技巧
80 0
|
3月前
|
编解码
QT基础入门——文件操作(六)
QT基础入门——文件操作(六)
27 0
QT基础入门——文件操作(六)
|
3月前
|
容器
QT基础入门——界面布局和常用控件(四)
QT基础入门——界面布局和常用控件(四)
38 0
QT基础入门——界面布局和常用控件(四)
|
3月前
|
存储
QT基础入门——QMainWindow与对话框QDialog(三)
QT基础入门——QMainWindow与对话框QDialog(三)
55 0
QT基础入门——QMainWindow与对话框QDialog(三)
|
3月前
QT基础入门——信号和槽机制(二)
QT基础入门——信号和槽机制(二)
70 0
QT基础入门——信号和槽机制(二)

推荐镜像

更多