summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/widgets/widgets/qcombobox.cpp50
-rw-r--r--src/widgets/widgets/qcombobox_p.h46
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;