背景,为什么要写这篇博客
今天学习 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);
可以发现,绘制变得更加方便。(一行代码绘制矩形)