MultiSelectComboBox.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #ifndef MULTISELECTCOMBOBOX_H
  2. #define MULTISELECTCOMBOBOX_H
  3. #include <QAbstractItemView>
  4. #include <QComboBox>
  5. #include <QListView>
  6. #include <QPainter>
  7. #include <QPair>
  8. #include <QStandardItem>
  9. #include <QStandardItemModel>
  10. class MultiSelectComboBox : public QComboBox {
  11. Q_OBJECT
  12. public:
  13. explicit MultiSelectComboBox(QWidget *parent = nullptr);
  14. ~MultiSelectComboBox();
  15. void addItem(const QString &key, const QString &value);
  16. void addItems(const QList<QPair<QString, QString>> &items);
  17. QStringList checkedKeys() const;
  18. QList<QPair<QString, QString>> checkedItemsWithKeys() const;
  19. void setCheckedKeys(const QStringList &keys);
  20. protected:
  21. bool eventFilter(QObject *object, QEvent *event) override;
  22. void showPopup() override;
  23. void hidePopup() override;
  24. void paintEvent(QPaintEvent *event) override;
  25. void mousePressEvent(QMouseEvent *event) override;
  26. private slots:
  27. void onItemChanged(QStandardItem *item);
  28. void updateText();
  29. private:
  30. void initialize();
  31. QStandardItemModel *model() const;
  32. QString displayText;
  33. bool skipNextHide;
  34. signals:
  35. void selectionChanged();
  36. };
  37. #endif // MULTISELECTCOMBOBOX_H