iis网站权限设置,免费wordpress空间,做的网站如何全屏,甘肃做网站多少钱继承ComboBox完成下拉复选框
自定义全选项 效果图
整个控件继承于QCombobox类。主要修改QLineEdit、QListWidget这两部分#xff0c;QComboBox提供如下接口#xff0c;可以将这两部分设置为新建的QLineEdit、QListWidget对象
CMultiSelectComboBox::CMultiSelectComboBo…继承ComboBox完成下拉复选框
自定义全选项 效果图
整个控件继承于QCombobox类。主要修改QLineEdit、QListWidget这两部分QComboBox提供如下接口可以将这两部分设置为新建的QLineEdit、QListWidget对象
CMultiSelectComboBox::CMultiSelectComboBox(QWidget* parent, bool bHasAllSelected): QComboBox(parent), m_bHasAllSelected(bHasAllSelected)
{m_pListWidget new QListWidget();m_pLineEdit new QLineEdit();m_pLineEdit-setReadOnly(true);setModel(m_pListWidget-model());setView(m_pListWidget);setLineEdit(m_pLineEdit);m_pLineEdit-installEventFilter(this);if (m_bHasAllSelected){AddItem(TransString2Unicode(全选), ALL_SELECTED);}
}完整代码
/*
** File name: MultiSelectComboBox.h
** Author:
** Date: 2024-12-26
** Brief: 多选下拉框控件
** Copyright (C) 1392019713qq.com All rights reserved.
*/#pragma once#include QComboBox
#include QListWidget
#include QLineEdit
#include QVariant
#include QEvent
#include QtGuiExportLib.hclass QTGUI_EXPORT CMultiSelectComboBox : public QComboBox
{
public:/** brief 构造函数* param parent 父控件* param bHasAllSelected 是否显示全选选项*/explicit CMultiSelectComboBox(QWidget* parent nullptr, bool bHasAllSelected false);virtual ~CMultiSelectComboBox() default;/** brief 设置是否显示全选选项 需在设置数据前调用* param bHasAllSelected 是否显示全选选项*/void SetHasAllSelected(bool bHasAllSelected true);void AddItem(const QString qstrItem, const QVariant rVar QVariant());void RemoveItem(const QVariant rVar);void ClearItems();QListQVariant GetSelectedItemDatas() const;QString GetCurrentText() const;protected:virtual bool eventFilter(QObject* pObj, QEvent* pEvent) override;private:void SetSelectedCheckState(int nState);void SetAllSelected(bool bChecked);int GetCheckedCount() const;private Q_SLOTS:void SlotItemStateChanged(int);void SlotItemClicked(int nIndex);void SlotChecBoxClicked();private:bool m_bHasAllSelected;QListWidget* m_pListWidget;QLineEdit* m_pLineEdit;
};
#include ../Include/MultiSelectComboBox.h
#include ../Include/Conversion.h
#include QCheckBox
#include QDebug#define ALL_SELECTED ALL_SELECT CMultiSelectComboBox::CMultiSelectComboBox(QWidget* parent, bool bHasAllSelected): QComboBox(parent), m_bHasAllSelected(bHasAllSelected)
{m_pListWidget new QListWidget();m_pLineEdit new QLineEdit();m_pLineEdit-setReadOnly(true);setModel(m_pListWidget-model());setView(m_pListWidget);setLineEdit(m_pLineEdit);m_pLineEdit-installEventFilter(this);if (m_bHasAllSelected){AddItem(TransString2Unicode(全选), ALL_SELECTED);}
}void CMultiSelectComboBox::SetHasAllSelected(bool bHasAllSelected)
{if (bHasAllSelected){AddItem(TransString2Unicode(全选), ALL_SELECTED);}else{RemoveItem(ALL_SELECTED);}m_bHasAllSelected bHasAllSelected;
}void CMultiSelectComboBox::AddItem(const QString qstrItem, const QVariant rVar)
{QListWidgetItem* pItem new QListWidgetItem(m_pListWidget);QCheckBox* pCheckBox new QCheckBox();pCheckBox-setText(qstrItem);pItem-setData(Qt::UserRole, rVar);m_pListWidget-addItem(pItem);m_pListWidget-setItemWidget(pItem, pCheckBox);connect(pCheckBox, QCheckBox::stateChanged, this, CMultiSelectComboBox::SlotItemStateChanged);connect(pCheckBox, QCheckBox::clicked, this, CMultiSelectComboBox::SlotChecBoxClicked);
}void CMultiSelectComboBox::RemoveItem(const QVariant rVar)
{for (int i 0; i m_pListWidget-count(); i){QListWidgetItem* pItem m_pListWidget-item(i);if (!pItem){continue;}if (pItem-data(Qt::UserRole) rVar){QWidget* pWidget m_pListWidget-itemWidget(pItem);QCheckBox* pCheckBox qobject_castQCheckBox*(pWidget);if (pCheckBox){delete pCheckBox;}m_pListWidget-removeItemWidget(pItem);m_pListWidget-takeItem(i);delete pItem;break;}}
}void CMultiSelectComboBox::ClearItems()
{m_pListWidget-clear();m_pLineEdit-clear();
}QListQVariant CMultiSelectComboBox::GetSelectedItemDatas() const
{QListQVariant lstVars;int i 0;if (m_bHasAllSelected){i 1;}for (; i m_pListWidget-count(); i){QListWidgetItem* pItem m_pListWidget-item(i);if (!pItem){continue;}QCheckBox* pCheckBox qobject_castQCheckBox*(m_pListWidget-itemWidget(pItem));if (!pCheckBox){continue;}if (pCheckBox-isChecked()){QVariant rVar pItem-data(Qt::UserRole);if (rVar.isValid()){lstVars.append(rVar);}}}return lstVars;
}QString CMultiSelectComboBox::GetCurrentText() const
{if (!m_pLineEdit){return QString();}return m_pLineEdit-text();
}bool CMultiSelectComboBox::eventFilter(QObject* pObj, QEvent* pEvent)
{if (pObj m_pLineEdit){if (pEvent-type() QEvent::MouseButtonPress){showPopup();return true;}}return false;
}void CMultiSelectComboBox::SetSelectedCheckState(int nState)
{for (int i 0; i m_pListWidget-count(); i){QCheckBox* pCheckBox qobject_castQCheckBox*(m_pListWidget-itemWidget(m_pListWidget-item(i)));if (!pCheckBox){continue;}if (pCheckBox-isChecked()){pCheckBox-setCheckState(Qt::CheckState(nState));}}
}void CMultiSelectComboBox::SetAllSelected(bool bChecked)
{for (int i 0; i m_pListWidget-count(); i){QCheckBox* pCheckBox qobject_castQCheckBox*(m_pListWidget-itemWidget(m_pListWidget-item(i)));if (!pCheckBox){continue;}pCheckBox-setChecked(bChecked);}
}int CMultiSelectComboBox::GetCheckedCount() const
{int i 0;if (m_bHasAllSelected){i 1;}int nCount 0;for (; i m_pListWidget-count(); i){QCheckBox* pCheckBox qobject_castQCheckBox*(m_pListWidget-itemWidget(m_pListWidget-item(i)));if (!pCheckBox){continue;}if (pCheckBox-isChecked()){nCount;}}return nCount;
}void CMultiSelectComboBox::SlotItemClicked(int nIndex)
{QCheckBox* pCheckBox qobject_castQCheckBox*(m_pListWidget-itemWidget(m_pListWidget-item(nIndex)));if (!pCheckBox){return;}if (m_bHasAllSelected nIndex 0){SetAllSelected(pCheckBox-isChecked());}else if(!m_bHasAllSelected){pCheckBox-setChecked(pCheckBox-isChecked());}else {pCheckBox-setChecked(pCheckBox-isChecked());int nCheckedCount GetCheckedCount();if (nCheckedCount 0){SetAllSelected(false);}else if (nCheckedCount m_pListWidget-count() - 1){SetSelectedCheckState(Qt::PartiallyChecked);}else{SetAllSelected(true);}}
}void CMultiSelectComboBox::SlotChecBoxClicked()
{int nIndex 0;QCheckBox* pCheckBox qobject_castQCheckBox*(sender());if (!pCheckBox){return;}for (int i 0; i m_pListWidget-count(); i){if (m_pListWidget-itemWidget(m_pListWidget-item(i)) pCheckBox){nIndex i;break;}}SlotItemClicked(nIndex);
}void CMultiSelectComboBox::SlotItemStateChanged(int nState)
{QString qstrText;int i 0;if (m_bHasAllSelected){i 1;}for (; i m_pListWidget-count(); i){QCheckBox* pCheckBox qobject_castQCheckBox*(m_pListWidget-itemWidget(m_pListWidget-item(i)));if(!pCheckBox){continue;}if (pCheckBox-isChecked()){qstrText pCheckBox-text() TransString2Unicode(、);}}qstrText.chop(1);m_pLineEdit-setText(qstrText);m_pLineEdit-setToolTip(qstrText);
}使用示例 可以提升控件也可以直接new
提升 ui-comboBox-SetHasAllSelected(true);ui-comboBox-AddItem(Sine Wave, 1);ui-comboBox-AddItem(Random Data, 2);ui-comboBox-AddItem(Custom Data, 3);ui-comboBox-AddItem(Custom Data 2, 4);ui-comboBox-RemoveItem(1);如果此文帮助到你动动小手点个赞可好 。