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);

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

相关推荐
benchmark_cc33 分钟前
量化项目启动时,应该先设计数据接口还是先编写策略?从系统架构角度做出正确选择
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
2601_9628857234 分钟前
如何用 Python 判断一只股票“追涨”还是“抄底”更有效?
android·开发语言·python
把我格子衫拿来1 小时前
VTK 与 Qt 的 CMake 工程怎么组织?模块、工具链与二进制兼容排错
c++·qt·vtk·cmake·工程实践
denlaku1 小时前
JDK 15 新特性详解
java·开发语言
滴滴答答哒1 小时前
C# 技巧:优雅实现对象的“局部更新”与“字段合并”
开发语言·c#
灯澜忆梦1 小时前
【面向对象编程c++】| 指针与自定义数据类型
开发语言·c++·算法
Brilliantwxx1 小时前
【Linux】 自主shell编写巩固复习篇
linux·运维·服务器·开发语言
十年Java程序媛1 小时前
Java 多线程基础与锁机制详解|进程线程、锁升级、synchronized 与 Lock 对比
java·开发语言·spring boot
弯_弯1 小时前
FDE 的工程能力画像:数据接入、PoC 与可复用资产的落地口径
java·服务器·开发语言
雾沉川2 小时前
Visual C++运行库合集 v105.0 安装教程
开发语言·c++·dll