#pragma once #include "iDlgBaseEx.h" #include "iRibbonXmlTab.h" #include "iGuiRibbon_global.h" ///ZXF202605 按钮面板Group管理类 class iWxGroupBar; /// @brief Ribbon简化,仅仅ToolBar模式 class I_GUI_RIBBON_EXPORT iWxToolBar : public iDlgBaseEx { Q_OBJECT public: explicit iWxToolBar(QString sXmlName = "", \ QWidget *parent = 0); ~iWxToolBar(); public: virtual void initUI(); // 返回部分指针变量 vecRibbonTabPtr* getRibbonStruts(); QVector* getSubCtrls(); // 根据辅助信息返回cmd iRibbonXmlCmd* getCmdByExtInfo(QString sExtInfo); // 根据ID返回cmd iRibbonXmlCmd* getCmdByID(QString sID); protected: // 定义 void loadXmlStructs(); // 切换正常模式和简缩模式 virtual void swapTabMode(); // // 各种类型 QWidget* createTabBy(iRibbonXmlTab* pTab); QWidget* createGroupBy(iRibbonXmlGroup* pGroup); // QWidget* createCmdBy(iRibbonXmlCmd* pCmd); // QWidget* createCmdBy_Btn(iRibbonXmlCmd* pCmd); // QWidget* createCmdBy_Combo(iRibbonXmlCmd* pCmd); // QWidget* createCmdBy_Check(iRibbonXmlCmd* pCmd); // QWidget* createCmdBy_Radio(iRibbonXmlCmd* pCmd); // QWidget* createCmdBy_Text(iRibbonXmlCmd* pCmd); // QWidget* createCmdBy_Label(iRibbonXmlCmd* pCmd); // QWidget* createCmdBy_ListWx(iRibbonXmlCmd* pCmd); // //新增加边界框 // QWidget* createCmdBy_LineEdit(iRibbonXmlCmd* pCmd); // virtual bool dealwithCmdSubBy(iRibbonXmlCmd* pCmd, QToolButton*& pBtn); ///ZXF202605 virtual void resizeEvent(QResizeEvent* event); ///ZXF202605 // 自动折叠:把指定的 group 列表按可用宽度从右往左折叠 // 由子类(iWxRibbon)按 tab 调用,每个 tab 一组 void layoutGroupsIn(const QList& vecBars, int avail); //private slots: // void slotBtnClicked(); //Btn // void slotListCtrlIndexChanged(int); //Combox ListWx // void slotCheckCtrlClicked(bool); //CheckBox, RadioBox signals: /// @title Ribbon信号触发 /// @param pCtrl触发的子控件 /// @param pInfo关联的Ribbon配置信息(来自xml) void sigRibbonActioned(QWidget* pCtrl, iRibbonXmlCmd* pInfo, QVariant o); /// @title Ribbon信号触发 /// @param pCtrl触发的子控件 /// @param pInfo关联的Ribbon配置信息(来自xml) /// @param listValues显示部分 /// @param listIDs void sigRibbonGetListValues(QWidget* pCtrl, iRibbonXmlCmd* pInfo, QStringList& listValues, QStringList& listIDs, int& nCurSel); /// @title Ribbon信号触发(允许外界对SplitBtton进行调整) /// @param pCtrl触发的子控件 /// @param pInfo关联的Ribbon配置信息(来自xml) /// @param listNames 英文Name /// @param listTexts 中文 /// @param listIcons 图标 /// @param bChanged 是否改变 void sigRibbonAdjustSplitBtns(QWidget* pCtrl, iRibbonXmlCmd* pInfo, QStringList& listNames, QStringList& listTexts, QStringList& listIcons, bool& bChanged); void sigRibbonListWxCurChanged(QWidget* pCtrl, iRibbonXmlCmd* pInfo, int nCurSel); void sigRibbonCheckWxClicked(QWidget* pCtrl, iRibbonXmlCmd* pInfo, bool bSelect); protected: QString m_sXmlName; //可以外部设定,只是文件名,不带xml后缀 // 配置化结构体 vecRibbonTabPtr m_vecTabXmls; // 所有的控件 QVector m_vecMenuActions; // 所有的控件 QVector m_vecSubCtrls; ///ZXF202605 bool m_bRelayouting; ///ZXF202605 // 当前正在构建的 tab 的 GroupBar 顺序收集器; // createTabBy() 开头清空,每 createGroupBy() 成功一次追加一项; // createTabBy() 结束后由调用方(iWxRibbon)按 tab page 取走存档 QList m_vecGroupBars; };