#ifndef MULTISELECTCOMBOBOX_H #define MULTISELECTCOMBOBOX_H #include #include #include #include #include #include #include class MultiSelectComboBox : public QComboBox { Q_OBJECT public: explicit MultiSelectComboBox(QWidget *parent = nullptr); ~MultiSelectComboBox(); void addItem(const QString &key, const QString &value); void addItems(const QList> &items); QStringList checkedKeys() const; QList> checkedItemsWithKeys() const; void setCheckedKeys(const QStringList &keys); protected: bool eventFilter(QObject *object, QEvent *event) override; void showPopup() override; void hidePopup() override; void paintEvent(QPaintEvent *event) override; private slots: void onItemChanged(QStandardItem *item); void updateText(); private: void initialize(); QStandardItemModel *model() const; QString displayText; bool skipNextHide; signals: void selectionChanged(); }; #endif // MULTISELECTCOMBOBOX_H