From 231be2e0a192f16141c12888e126bb2284b29b9f Mon Sep 17 00:00:00 2001 From: Wang Chuan Date: Sun, 25 Oct 2020 21:38:19 +0800 Subject: [PATCH] QCombobox: propagate the palette to the embedded line edit Let the new created embedded QLineEdit use the palette from QCombobox, when calling [setEditable(true)] Fixes: QTBUG-81533 Pick-to: 5.15 Change-Id: Ia406dd8122a348e185f0e94d027646b95eeaa76e Reviewed-by: Richard Moe Gustavsen --- src/widgets/widgets/qcombobox.cpp | 1 + .../widgets/qcombobox/tst_qcombobox.cpp | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index db65285aef0..f2baa5f8e82 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -1781,6 +1781,7 @@ void QComboBox::setEditable(bool editable) view()->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); } QLineEdit *le = new QLineEdit(this); + le->setPalette(palette()); setLineEdit(le); } else { if (style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, this)) { diff --git a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp index 30f51e1d423..e22a9006760 100644 --- a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp +++ b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp @@ -166,6 +166,7 @@ private slots: void inputMethodUpdate(); void task_QTBUG_52027_mapCompleterIndex(); void checkMenuItemPosWhenStyleSheetIsSet(); + void checkEmbeddedLineEditWhenStyleSheetIsSet(); private: PlatformInputContext m_platformInputContext; @@ -3515,5 +3516,31 @@ void tst_QComboBox::checkMenuItemPosWhenStyleSheetIsSet() qApp->setStyleSheet(oldCss); } +void tst_QComboBox::checkEmbeddedLineEditWhenStyleSheetIsSet() +{ + QString newCss = "QWidget { background-color: red; color: white; }"; + QString oldCss = qApp->styleSheet(); + qApp->setStyleSheet(newCss); + + QWidget topLevel; + auto layout = new QVBoxLayout(&topLevel); + topLevel.setLayout(layout); + auto comboBox = new QComboBox; + layout->addWidget(comboBox); + topLevel.show(); + comboBox->setEditable(true); + QApplication::setActiveWindow(&topLevel); + QVERIFY(QTest::qWaitForWindowActive(&topLevel)); + + QImage grab = comboBox->grab().toImage(); + auto color = grab.pixelColor(grab.rect().center()); + + QVERIFY(color.red() > 240); + QVERIFY(color.green() < 20); + QVERIFY(color.blue() < 20); + + qApp->setStyleSheet(oldCss); +} + QTEST_MAIN(tst_QComboBox) #include "tst_qcombobox.moc"