libreCAD源码阅读笔记4
前言
总的来说,程序主窗口QC_ApplicationWindow使用QMdiArea作为多文档主界面,每个文档QC_MDIWindow使用RS_Document作为数据存储模型,QG_Graphicview作为每个文档窗口部件;QC_ApplicationWindow主窗口构造函数中使用工具类LC_ActionFactory生成各种程序Action,这些Action触发后都将调用QG_ActionHandler中的函数作为Action信号的槽函数。QG_ActionHandler槽函数根据信号源确定是什么Action操作类型,调用其成员函数setCurrentAction()产生具体Action对象,并调用其关联的QG_GraphicView也调用其自身setCurrentAction()将Action对象传递给RS_EventHandler。此后,当用户窗口绘图后,回调用当前的Action对象进行相关操作。

比如画线
- 1 当主窗口点击画线按钮,触发画线的Action,根据下面代码,程序将会调用QG_ActionHandler的slotDrawLine()函数。
LC_ActionFactory.cpp : 120行
action = new QAction(tr("&2 Points"), agm->line);
action->setIcon(QIcon(":/icons/line_2p.svg"));
connect(action, SIGNAL(triggered()),
action_handler, SLOT(slotDrawLine()));
action->setObjectName("DrawLine");
a_map["DrawLine"] = action;
QG_ActionHandler.cpp : 1329行
void QG_ActionHandler::slotDrawLine() {
setCurrentAction(RS2::ActionDrawLine);
}
RS_ActionInterface* QG_ActionHandler

本文档是libreCAD源码阅读笔记的第四部分,主要介绍了程序主窗口的结构,包括QMdiArea和RS_Document的数据模型。当用户执行画线操作时,详细阐述了从点击画线按钮到最终实体对象绘制的流程,涉及QC_ApplicationWindow、QG_GraphicView和RS_EventHandler的角色交互。最后提到后续将深入研究RS_Commands类以理解命令窗口绘制实体对象的实现。
最低0.47元/天 解锁文章
2308

被折叠的 条评论
为什么被折叠?



