2.Gui-基本结构

本文深入分析了FreeCAD的Gui开发,包括Module注册、Command注册的详细步骤,如Command.cpp中的命令宏、命令定义及注册,以及ViewProvider的绑定和Workbench的注册,讲解了如何在FreeCAD中创建自定义工作台并设置菜单和工具栏。
摘要由CSDN通过智能技术生成

0.前言

通过前文的学习,我们已经建立了自己的模块PersonalReverse,可以在FreeCAD中打开,还有一个可以在控制台打印Hello World!\n的图标命令,而且工作台Workbench的图标和命令的图标都设置成了我们自己的。通过修改Gui下的CMakeLists.txt,我们将自己的Workbench图标添加到了项目中。
现在,我们将更进一步分析Gui下的文件


1.Module注册

由于我们是C++的Workbench开发,我们的PersonalReverseGui模块实际不需要提供任何函数,所以AppPersonalReverseGui.cpp不用修改。

2.Command注册(Command.cpp)

1.命令宏

每一个命令都定义其X类,并继承自Comand类,X为该命令的全局唯一命名。 使用宏,四选一:
DEF_STD_CMD_A(X) //可以在isActive中添加激活条件,不满足则图标无法被点击 
DEF_STD_CMD(X)  //一直处于激活状态 
DEF_STD_CMD_AC(X)  
DEF_STD_CMD_C(X) //可以添加创建命令createAction
每一个命令都必须定义其同名构造函数,并继承父类Command的构造方法。重新分配其所属的APP,Group,和提示词。

2.命令定义
以下是利用模板生成后,添加的一个测试命令CmdPersonalReverseTest

// 命令宏
DEF_STD_CMD(CmdPersonalReverseTest)
// 这里定义了命令的基本信息
CmdPersonalReverseTest::CmdPersonalReverseTest()
  :Command("PersonalReverse_Test")
{
    sAppModule    = "PersonalReverse";
    sGroup        = QT_TR_NOOP("PersonalReverse");
    sMenuText     = QT_TR_NOOP("Hello");
    sToolTipText  = QT_TR_NOOP("PersonalReverse Test function");
    sWhatsThis    = "PersonalReverse_Test";
    sStatusTip    = QT_TR_NOOP("PersonalReverse Test function");
    sPixmap       = "actions/FitSurface";
    sAccel        = "CTRL+H";
}
// 命令点击时会调用该函数
void CmdPersonalReverseTest::activated(int)
{
    Base::Console().Message("Hello, World!\n");
}

3.将命令注册到命令管理器中

void CreatePersonalReverseCommands(void)
{
    Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager();
    rcCmdMgr.addCommand(new CmdPersonalReverseTest());
}

3.绑定三维视图ViewProvider


4.注册工作台(Workbench.cpp)

  1. 宏定义:从StdWorkbench继承
TYPESYSTEM_SOURCE(PersonalReverseGui::Workbench, Gui::StdWorkbench)
  1. 设置菜单栏
Gui::MenuItem* Workbench::setupMenuBar() const
{
    Gui::MenuItem* root = StdWorkbench::setupMenuBar();
    Gui::MenuItem* item = root->findItem( "&Windows" );
    Gui::MenuItem* test = new Gui::MenuItem;
    root->insertItem( item, test );
    test->setCommand("PersonalReverse"); //这里将PersonalReverse模块加载到了菜单栏(Gui中添加了App定义的模块)
    *test << "PersonalReverse_Test"; //这里将测试命令添加到了菜单栏
    return root;
}
  1. 设置工具栏
Gui::ToolBarItem* Workbench::setupToolBars() const
{
    Gui::ToolBarItem* root = StdWorkbench::setupToolBars();
    Gui::ToolBarItem* test = new Gui::ToolBarItem(root);
    test->setCommand( "PersonalReverse Tools" );
    *test << "PersonalReverse_Test"; //这里将测试命令添加到了工具栏
    return root;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骨骼建模师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值