123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- #ifndef MULTISELECTCOMBOBOX_H
- #define MULTISELECTCOMBOBOX_H
- #include <QAbstractItemView>
- #include <QComboBox>
- #include <QListView>
- #include <QPainter>
- #include <QPair>
- #include <QStandardItem>
- #include <QStandardItemModel>
- 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<QPair<QString, QString>> &items);
- QStringList checkedKeys() const;
- QList<QPair<QString, QString>> 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;
- void mousePressEvent(QMouseEvent *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
|