一、效果展示

二、实现思路
写一个类MultiSelectComboBox继承QComboBox,要实现多选则可以设置QComboBox的View,通过view的item设置可以多选,然后重写QComboBox的showPopup、hidePopup、eventFilter,控制下列表框点框的弹出有关闭。
三、代码实现
multiselectcombobox.h
#ifndef MULTISELECTCOMBOBOX_H
#define MULTISELECTCOMBOBOX_H
#include <QWidget>
#include <QListView>
#include <QStandardItemModel>
#include <QComboBox>
class MultiSelectComboBox : public QComboBox
{
Q_OBJECT
public:
MultiSelectComboBox(QWidget *parent = nullptr);
~MultiSelectComboBox() override;
void addItem(const QString &text, const QVariant &userData = QVariant());
void addItem(const QIcon &icon, const QString &text, const QVariant &userData = QVariant());
void addItems(const QStringList &texts);
QStringList currentText();
QList<int> currentIndex();
protected:
bool eventFilter(QObject *watched, QEvent *event) override;
void showPopup() override;
void hidePopup() override;
private:
bool isPermitHidePopup;
QListView* selectItemView;
QStandardItemModel* selectModel;
QListView* popupView;
QStandardItemModel* popupModel;
void selectItemViewPress(QPoint pos);
};
#endif // MULTISELECTCOMBOBOX_H
multiselectcombobox.cpp
#include "multiselectcombobox.h"
#include <QStandardItem>
#include <QHBoxLayout>
#include <QEvent>
#include <QMouseEvent>
MultiSelectComboBox::MultiSelectComboBox(QWidget *parent)

本文介绍了一种实现多选下拉框的方法,通过继承QComboBox并重写相关函数,结合QListView和QStandardItemModel实现。详细介绍了代码实现过程,包括样式设置、事件过滤器以及添加、删除选项等功能。同时提供了源码下载链接。
最低0.47元/天 解锁文章
4549

被折叠的 条评论
为什么被折叠?



