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

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

相关推荐
ch.ju几秒前
Java程序设计(第3版)第四章——final修饰的方法和类
java·开发语言
极***技20 分钟前
2026云原生核心!Go高并发限流实战,从原理到落地
开发语言·云原生·golang
牛大了20231 小时前
场景题:数据迁移解决方案
开发语言
认真的酒窝9 小时前
自己动手开发编译器(十一)语义分析
java·开发语言
wbs_scy11 小时前
Linux C++ 高并发编程:线程池全链路深度解析,从原理到手撕实现
java·开发语言
JAVA面经实录91711 小时前
Linux 常用命令完整知识体系
java·linux·开发语言·汇编
贪玩的蛋挞11 小时前
C#与闭包
开发语言·c#
端庄的战斗机11 小时前
javascript 设计模式(文章很长,请自备瓜子,水果和眼药水)
开发语言·javascript·设计模式
Full Stack Developme12 小时前
Java LRU 与 LFU 算法及应用
java·开发语言·算法
C语言小火车14 小时前
C++ 堆排序深度精讲:基于完全二叉树的选择排序进化,最坏情况 O(n log n) 的稳定王者
开发语言·c++·算法·排序算法·堆排序