diff --git a/autotests/klineedit_unittest.cpp b/autotests/klineedit_unittest.cpp --- a/autotests/klineedit_unittest.cpp +++ b/autotests/klineedit_unittest.cpp @@ -19,6 +19,7 @@ */ #include +#include #include #include #include @@ -278,6 +279,20 @@ QApplication::clipboard()->setText(origText); } + void testClearButtonClicked() + { + KLineEdit w; + w.setText(QStringLiteral("Hello world")); + w.setClearButtonEnabled(true); + w.setClearButtonEnabled(false); + w.setClearButtonEnabled(true); + QSignalSpy spy(&w, &KLineEdit::clearButtonClicked); + QToolButton *tb = w.findChild(); + QTest::mouseClick(tb, Qt::LeftButton, Qt::NoModifier); + QCOMPARE(w.text(), QString()); + QCOMPARE(spy.count(), 1); + } + }; QTEST_MAIN(KLineEdit_UnitTest) diff --git a/src/klineedit.cpp b/src/klineedit.cpp --- a/src/klineedit.cpp +++ b/src/klineedit.cpp @@ -165,10 +165,6 @@ void KLineEdit::setClearButtonShown(bool show) { setClearButtonEnabled(show); - if (show) { - QAction *clearAction = findChild(QLatin1String("_q_qlineeditclearaction")); - connect(clearAction, &QAction::triggered, this, &KLineEdit::clearButtonClicked); - } } bool KLineEdit::isClearButtonShown() const @@ -1057,6 +1053,16 @@ d->previousHighlightedTextColor = p.color(QPalette::Normal, QPalette::HighlightedText); d->previousHighlightColor = p.color(QPalette::Normal, QPalette::Highlight); setUserSelection(d->userSelection); + } else if (ev->type() == QEvent::ChildAdded) { + QObject *obj = static_cast(ev)->child(); + if (obj) { + connect(obj, &QObject::objectNameChanged, this, [this, obj] { + if (obj->objectName() == QLatin1String("_q_qlineeditclearaction")) { + QAction *action = qobject_cast(obj); + connect(action, &QAction::triggered, this, &KLineEdit::clearButtonClicked); + } + }); + } } return QLineEdit::event(ev); diff --git a/tests/klineedittest.cpp b/tests/klineedittest.cpp --- a/tests/klineedittest.cpp +++ b/tests/klineedittest.cpp @@ -27,7 +27,7 @@ m_lineedit->setObjectName(QStringLiteral("klineedittest")); m_lineedit->completionObject()->setItems(list); m_lineedit->setSqueezedTextEnabled(true); - m_lineedit->setClearButtonShown(true); + m_lineedit->setClearButtonEnabled(true); connect(m_lineedit, SIGNAL(returnPressed()), SLOT(slotReturnPressed())); connect(m_lineedit, SIGNAL(returnPressed(QString)), SLOT(slotReturnPressed(QString)));