MultiSelectComboBox.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. private slots:
  26. void onItemChanged(QStandardItem *item);
  27. void updateText();
  28. private:
  29. void initialize();
  30. QStandardItemModel *model() const;
  31. QString displayText;
  32. bool skipNextHide;
  33. signals:
  34. void selectionChanged();
  35. };
  36. #endif // MULTISELECTCOMBOBOX_H