diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/widgets/widgets/qcombobox.cpp | 50 | ||||
| -rw-r--r-- | src/widgets/widgets/qcombobox_p.h | 46 |
2 files changed, 55 insertions, 41 deletions
diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index 2f51b83a49d..8f6582c50aa 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -60,6 +60,56 @@ QT_BEGIN_NAMESPACE using namespace Qt::StringLiterals; +// +// QComboBoxListView +// + +QComboBoxListView::QComboBoxListView(QComboBox *cmb) : combo(cmb) +{ + if (cmb) + setScreen(cmb->screen()); +} + +QComboBoxListView::~QComboBoxListView() + = default; + +void QComboBoxListView::resizeEvent(QResizeEvent *event) +{ + resizeContents(viewport()->width(), contentsSize().height()); + QListView::resizeEvent(event); +} + +void QComboBoxListView::initViewItemOption(QStyleOptionViewItem *option) const +{ + QListView::initViewItemOption(option); + option->showDecorationSelected = true; + if (combo) + option->font = combo->font(); +} + +void QComboBoxListView::paintEvent(QPaintEvent *e) +{ + if (combo) { + QStyleOptionComboBox opt; + opt.initFrom(combo); + opt.editable = combo->isEditable(); + if (combo->style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, combo)) { + //we paint the empty menu area to avoid having blank space that can happen when scrolling + QStyleOptionMenuItem menuOpt; + menuOpt.initFrom(this); + menuOpt.palette = palette(); + menuOpt.state = QStyle::State_None; + menuOpt.checkType = QStyleOptionMenuItem::NotCheckable; + menuOpt.menuRect = e->rect(); + menuOpt.maxIconWidth = 0; + menuOpt.reservedShortcutWidth = 0; + QPainter p(viewport()); + combo->style()->drawControl(QStyle::CE_MenuEmptyArea, &menuOpt, &p, this); + } + } + QListView::paintEvent(e); +} + QComboBoxPrivate::QComboBoxPrivate() : QWidgetPrivate(), shownOnce(false), diff --git a/src/widgets/widgets/qcombobox_p.h b/src/widgets/widgets/qcombobox_p.h index 0bffbb26292..c6f9f0c6b41 100644 --- a/src/widgets/widgets/qcombobox_p.h +++ b/src/widgets/widgets/qcombobox_p.h @@ -48,49 +48,13 @@ class QComboBoxListView : public QListView { Q_OBJECT public: - QComboBoxListView(QComboBox *cmb = nullptr) : combo(cmb) - { - if (cmb) - setScreen(cmb->screen()); - } + explicit QComboBoxListView(QComboBox *cmb = nullptr); + ~QComboBoxListView() override; protected: - void resizeEvent(QResizeEvent *event) override - { - resizeContents(viewport()->width(), contentsSize().height()); - QListView::resizeEvent(event); - } - - void initViewItemOption(QStyleOptionViewItem *option) const override - { - QListView::initViewItemOption(option); - option->showDecorationSelected = true; - if (combo) - option->font = combo->font(); - } - - void paintEvent(QPaintEvent *e) override - { - if (combo) { - QStyleOptionComboBox opt; - opt.initFrom(combo); - opt.editable = combo->isEditable(); - if (combo->style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, combo)) { - //we paint the empty menu area to avoid having blank space that can happen when scrolling - QStyleOptionMenuItem menuOpt; - menuOpt.initFrom(this); - menuOpt.palette = palette(); - menuOpt.state = QStyle::State_None; - menuOpt.checkType = QStyleOptionMenuItem::NotCheckable; - menuOpt.menuRect = e->rect(); - menuOpt.maxIconWidth = 0; - menuOpt.reservedShortcutWidth = 0; - QPainter p(viewport()); - combo->style()->drawControl(QStyle::CE_MenuEmptyArea, &menuOpt, &p, this); - } - } - QListView::paintEvent(e); - } + void resizeEvent(QResizeEvent *event) override; + void initViewItemOption(QStyleOptionViewItem *option) const override; + void paintEvent(QPaintEvent *e) override; private: QComboBox *combo; |
