action添加方法¶
这里介绍DAWorkBench的主程序中添加action的过程
警告
这里不是针对插件的action添加,是主程序的action添加过程,如果参与主程序的开发,请阅读此文
DAWorkBench的所有内置action位于APP/DAAppActions类中,DAAppActions负责整个程序所有action的管理
界面构建位于APP/DAAppRibbonArea类中,action如果要呈现到界面上,你需要在此类中操作
信号槽动作通过APP/DAAppController类实现,action的槽函数都在这里绑定
因此,一个action的添加,你需要在这三个类中操作:
- 添加action到
APP/DAAppActions类中 - 在
APP/DAAppRibbonArea类中构建action对应的界面 - 在
APP/DAAppController类中绑定action的槽函数
例子¶
这里以添加一个action为例,例如我要实现打开这个功能
-
APP/DAAppActions类的头文件中定义action1QAction* actionOpen; ///< 打开 -
APP/DAAppActions类的源文件中初始化action1 2 3 4 5 6 7 8 9 10 11 12 13 14
void DAAppActions::buildMainAction() { ... actionOpen = createAction("actionOpen", ":/app/bright/Icon/file.svg"); ... } void DAAppActions::retranslateUi() { ... actionOpen->setText(tr("Open")); // cn:打开 actionOpen->setToolTip(tr("Open file or project")); // cn:打开文件或项目 ... }注意
action所有文字相关的操作都放到retranslateUi()函数中,这样可以根据语言进行翻译
-
在
APP/DAAppRibbonArea类的源文件中构建action对应的界面1 2 3 4 5 6 7 8 9 10 11
/** * @brief 构建主页标签 * 主页的category objname = da-ribbon-category-main */ void DAAppRibbonArea::buildRibbonMainCategory(){ ... m_pannelMainFileOpt = new SARibbonPannel(m_categoryMain); m_pannelMainFileOpt->setObjectName(QStringLiteral("da-ribbon-pannel-main.common")); m_pannelMainFileOpt->addLargeAction(m_actions->actionOpen); ... } -
在
APP/DAAppController类中绑定action的槽函数APP/DAAppController.h:
1 2 3 4 5 6 7 8 9 10 11
/** * @brief 控制层负责逻辑的对接 */ class DAAppController : public QObject { Q_OBJECT ... public Q_SLOTS: // 打开文件 void open(); };APP/DAAppController.cpp:
1 2 3 4 5 6 7 8 9 10
/** * @brief 基本绑定 * @note 在setDockAreaInterface函数中还有很多绑定操作 */ void DAAppController::initConnection() { ... connect(mActions->actionOpen, &QAction::triggered, this, &DAAppController::open) ... }