#pragma once #include #include "Defines.h" #include "iPlugin_global.h" // 方案二: // 自定义Combobox,支持CheckBox、Radio双重选 // 作者:地大学生 wangjr class I_PLUGIN_EXPORT ZxComboBoxFuzzy : public QComboBox { Q_OBJECT public: explicit ZxComboBoxFuzzy(QWidget* parent = 0); ~ZxComboBoxFuzzy(); /// @brief 参数传递,确定默认值 /// @param listAllItems 所有数据项 /// @param listCbxs 复选项名称列表,默认为空 /// @param sRadio 单选项名称,默认为空 /// @note 如果sRadio为空,且listCbxs非空, /// 则指定sRadio为listCbxs第一个 void setInfos(QStringList& listAllItems, \ QStringList listCbxs = QStringList(), \ QString sRadio = ""); /// @brief 参数传递,确定默认值 /// @param listAllItems 所有数据项 /// @param vecIndexCbxs 复选项索引,默认为空 /// @param indexRadio 单选项索引,默认为-1 /// @note 如果indexRadio为-1,且vecIndexCbxs非空, /// 则指定indexRadio为vecIndexCbxs第一个 void setInfos(const QStringList& listAllItems, \ QVector vecIndexCbxs = VecInt(), \ int indexRadio = -1); /// @brief 设定排外(互斥)的项,比如UserInput、Table、Const等等,只适用于PVT void setExclusiveItems(QStringList& list); /// @brief 返回所有项 QStringList getAllItems(); /// @brief 返回勾选项索引 QVector getCheckedIndexs(); /// @brief 返回单选项索引 int getRadioIndex(); private: void init(); void saveInitialState();// 保存初始状态 void updateComboBoxDisplay(); signals: // 当选择变化时发射,传递复选框选中的索引和单选框的索引 void sigSelChanged(const QVector& vecIndexCbx, int indexRadio); // void accepted(); // void rejected(); private slots: void slotCheckBoxStateChanged(int state);// 复选框状态变化槽函数 void slotRadioBtnToggled(bool checked);// 单选按钮状态变化槽函数 void slotOkClicked();// 确认按钮点击槽函数 void slotApplyClicked(); // 应用按钮点击槽函数 void slotCancelClicked();// 取消按钮点击槽函数 protected: void showPopup(); void hidePopup(); bool eventFilter(QObject* obj, QEvent* event); private: QListWidget* m_pListWx; // 列表小部件指针,用于显示列表项 QFrame* m_pPopupFrame; // 弹出框架 QPushButton* m_pBtnOk; // 确认按钮 QPushButton* m_pBtnApply; // 应用按钮 QPushButton* m_pBtnCancel; // 取消按钮 int m_nRadioIndex; // 单选按钮索引 QVector m_vecCheckedIndexs; // 复选框选中的索引 QVector m_vecInitialCheckedIndices; // 初始状态时复选框选中的索引 int m_nInitialRadioIndex; // 初始状态时单选按钮的索引 QStringList m_listAllItems; // 所有选项内容 QStringList m_listExclusiveItems; //设定排外(互斥)的项,比如UserInput、Table、Const等等,只适用于PVT }; //class MainWindow : public QMainWindow { // Q_OBJECT //public: // explicit MainWindow(QWidget* parent = 0); //private slots: // void slotSelectionChanged(const QVector &vecIndexCbx, int indexRadio);//响应CustomComboBox的sigSelChanged信号 // void slotAccepted();// 响应CustomComboBox的accepted信号 // void slotRejected();//响应CustomComboBox的rejected信号 //};