Qt QGraphicsScene 的用法

背景,为什么要写这篇博客

今天学习 model - view 模式的时候还看到有 scene - view 模式。不知道还有这个模式,所以学习了下。

学习后总体的感觉是:其实没有也是可以的,但有了方便许多。

从两种画图的方法开始说

以前有个项目也是需要绘图的,但我没有用到 scene 呀?于是我回去看了下,发现确实是可以不用。但用了也没有问题。

我们以绘制边为例子,看看两种写法如何

1. 不用 scene

cpp 复制代码
	QPainter painter(this);

	// 画边
	painter.setPen(m_pSystem->GetEdgePen());
	QVector<CEdge>::const_iterator  cite = m_pGraph->m_EdgeVec.constBegin();
	while (cite != m_pGraph->m_EdgeVec.constEnd())
	{
		painter.drawLine(QLineF(
			QPoint(
				m_dStartX + cite->m_Node1.m_dNodePosX * m_dScale,
				m_dStartY + cite->m_Node1.m_dNodePosY * m_dScale),
			QPointF(
				m_dStartX + cite->m_Node2.m_dNodePosX * m_dScale,
				m_dStartY + cite->m_Node2.m_dNodePosY * m_dScale)));
		cite++;
	}

可以发现,其实完全可以用画笔类:QPainter 的方法 drawLine 绘制。

2. 用 sence

cpp 复制代码
    // 创建图形场景
    QGraphicsScene scene;

    // 添加一个矩形
    QGraphicsRectItem *rectItem = scene.addRect(0, 0, 100, 100, QPen(Qt::black), QBrush(Qt::cyan));

    // 创建 QGraphicsView
    QGraphicsView view(&scene);

可以发现,绘制变得更加方便。(一行代码绘制矩形)

相关推荐
来让爷抱一个14 分钟前
Python 异步里混用同步库,事件循环被卡住的全过程
开发语言·python
心祭丫丫3 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
露天赏雪3 小时前
第3篇:Sentinel熔断降级实战:大模型接口抖动时的服务兜底方案
java·开发语言·人工智能·spring boot·spring·servlet·sentinel
yeccheng6 小时前
MySQL 索引超详解:从底层 B+ 树到面试高频考点
java·开发语言·jvm·mysql·面试
联犀6 小时前
纯 Go 的 CAD 开源库 go-cad:直接解析 DWG/DXF,现在也能导出 PDF
开发语言·golang·pdf
zjxtxdy6 小时前
C++面向对象程序开发-类与对象
开发语言·c++
qq_406981038 小时前
c++拷贝构造函数
开发语言·c++
爱喝雪碧的可乐9 小时前
MATLAB
开发语言·算法·matlab
H.莓飛11 小时前
【C++】【STL】vector_OJ题
linux·服务器·开发语言·数据结构·c++·visual studio
j7~12 小时前
【C++ 八股文】(篇四)C++11 新特性
开发语言·c++·面试·c++11·八股文