libreCAD源码阅读笔记4

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

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 : 1329void QG_ActionHandler::slotDrawLine() {
   
    setCurrentAction(RS2::ActionDrawLine);
}

RS_ActionInterface
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值