#pragma once #include "iWxToolBar.h" #include namespace Ui { class iWxRibbon; } class QMenu; class I_GUI_RIBBON_EXPORT iWxRibbon : public iWxToolBar { Q_OBJECT public: // 如果自行传入sXmlName(文件名,不带后缀),且bToolbarExt为true,则为ToolBar扩展模式 explicit iWxRibbon(QString sXmlName = "", \ QWidget *parent = 0); ~iWxRibbon(); void initUI(); // 类Wps文件模式定制 void setWpsLike(bool b); // 返回部分指针变量 QVector* getMenuActions(); //ZXF202409得到按钮(为了更新按钮的子项例如窗口个数管理) QWidget* getSubCtrl(QString sID); //更新按钮(主要是子项) bool refreshSubCtrl(QString sID, QStringList listSubWnds, QVector vecShows); // 最近打开 bool refreshRecentProjects(QString& sPath); //最近打开 bool fillUIOfRecentProjects(); //更新最近打开菜单项 bool removeFromRecentProjects(QString sUrl); protected: // paint virtual void paintEvent(QPaintEvent *); ///ZXF202605 // resize: 触发各 tab 内 group 的折叠重排 virtual void resizeEvent(QResizeEvent* event) ; protected slots: ///ZXF202605 // 遍历每个 tab,对其中的 group 单独按 ribbon 当前宽度折叠 void relayoutAllTabs(); private slots: void on_tabWxMain_tabCloseRequested(int index); void on_tabWxMain_currentChanged(int index); void on_tabWxMain_customContextMenuRequested(const QPoint &pos); void slotMenuItemClicked(); //文件菜单Item void slotTabItemDoubleClicked(int n); void slotTabItemActivated(int n); void slotFileClicked(); //File void slotOpentRecent(); signals: /// @title File按钮信号触发 void sigRibbonFileActivated(); /// @title Ribbon文件菜单信号触发 /// @param sID菜单ID /// @param sName菜单名称 void sigRibbonFileMenuClicked(QString sID, QString sName); /// @title 触发信号由外界处理最近文档 void sigFileRecentActivated(QString sUrl); /// @brief 某一Tab被激活,指的Ribbon最顶级的Tab,比如,数据管理、数据编辑、处理解释等等 /// @param pTab void sigRibbonTabActivated(iRibbonXmlTab* pTab); // 20190425 // 允许外界对FileMenu进行调整 // 触发此信号时,pMenu已经填入xml中配置的菜单项 void sigAdjustFileMenu(QMenu*& pMenu); private: // load Xml And Ini void loadIniInfos(); // 初始化 void initUI_TabWx(); void initUI_Menu(QMenu*& pMenu); // 切换正常模式和简缩模式 virtual void swapTabMode(); // // 绘制Logo void drawAppInfo(QPainter* painter); // 获取当前Tab页中的所有Group的宽度 int getCurTabValidWidth(); // 虚拟按钮的响应 // 如果返回true,则不再触发信号,否则触发 virtual bool runByVirtualBtn(); virtual bool dealwithCmdSubBy(iRibbonXmlCmd* pCmd, QToolButton*& pBtn); private: Ui::iWxRibbon *ui; protected: // 简缩模式相关 bool m_bSimple; int m_nLastSel; // 类Wps文件模式定制 bool m_bWpsLike; // 模块相关,从ini中读取出来 QString m_sIcon; QString m_sAppDescCN; QString m_sAppDescEN; // 最近打开项目 enum { MaxRecentProjects = 5 }; QAction* m_oRecentProjectActs[MaxRecentProjects]; QStringList m_listRencentProjects; QMenu* m_pMenuRecent; ///ZXF202605 // tab page → 该 page 下按视觉顺序排列的 GroupBar // 每个 tab 创建完成后存档,relayout 时按页查表使用 QHash > m_mapPageToBars; };