|
|
#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信号
|
|
|
//};
|
|
|
|