You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWATI/Include/iBase/iPlugin/ZxComboBoxFuzzy.h

108 lines
3.5 KiB
C

#pragma once
#include <QComboBox>
#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<int> vecIndexCbxs = VecInt(), \
int indexRadio = -1);
/// @brief 设定排外互斥的项比如UserInput、Table、Const等等只适用于PVT
void setExclusiveItems(QStringList& list);
/// @brief 返回所有项
QStringList getAllItems();
/// @brief 返回勾选项索引
QVector<int> getCheckedIndexs();
/// @brief 返回单选项索引
int getRadioIndex();
private:
void init();
void saveInitialState();// 保存初始状态
void updateComboBoxDisplay();
signals:
// 当选择变化时发射,传递复选框选中的索引和单选框的索引
void sigSelChanged(const QVector<int>& 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<int> m_vecCheckedIndexs; // 复选框选中的索引
QVector<int> 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<int> &vecIndexCbx, int indexRadio);//响应CustomComboBox的sigSelChanged信号
// void slotAccepted();// 响应CustomComboBox的accepted信号
// void slotRejected();//响应CustomComboBox的rejected信号
//};