2020#endif
2121
2222#include < QAction>
23+ #include < QWidgetAction>
2324#include < QPainter>
2425#include < QDebug>
2526#include < QLabel>
@@ -292,21 +293,27 @@ void DSearchEditPrivate::init()
292293{
293294 D_Q (DSearchEdit);
294295 label = new QLabel;
295- DIconButton *iconbtn = new DIconButton (DStyle::SP_IndicatorSearch);
296296
297- iconbtn->setFlat (true );
298- iconbtn->setFocusPolicy (Qt::NoFocus);
299- iconbtn->setAttribute (Qt::WA_TransparentForMouseEvents);
300- iconbtn->setAccessibleName (" DSearchEditIconButton" );
297+ auto createSearchIconButton = []() {
298+ DIconButton *iconbtn = new DIconButton (DStyle::SP_IndicatorSearch);
299+ iconbtn->setFlat (true );
300+ iconbtn->setFocusPolicy (Qt::NoFocus);
301+ iconbtn->setAttribute (Qt::WA_TransparentForMouseEvents);
302+ iconbtn->setAccessibleName (" DSearchEditIconButton" );
303+ iconbtn->setIconSize (QSize (20 , 20 ));
304+ return iconbtn;
305+ };
306+
307+ auto iconbtn = createSearchIconButton ();
301308
302309 placeHolder = qApp->translate (" DSearchEdit" , " Search" );
303310
304- action = new QAction (q);
311+ action = new QWidgetAction (q);
305312 action->setObjectName (" _d_search_leftAction" );
306- action->setIcon (DIconTheme::findQIcon (" search_indicator" ));
313+ auto iconAction = createSearchIconButton ();
314+ action->setDefaultWidget (iconAction);
307315 q->lineEdit ()->addAction (action, QLineEdit::LeadingPosition);
308- action->setVisible (false );
309- iconbtn->setIconSize (QSize (20 , 20 ));
316+ action->defaultWidget ()->setVisible (false );
310317
311318 DPalette pe;
312319 QStyleOption opt;
@@ -405,7 +412,7 @@ void DSearchEditPrivate::_q_toEditMode(bool focus)
405412 q->lineEdit ()->setTextMargins (textMargins);
406413 if (animation->direction () == QPropertyAnimation::Direction::Forward) {
407414 iconWidget->setVisible (false );
408- action->setVisible (true );
415+ action->defaultWidget ()-> setVisible (true );
409416 lineEdit->setPlaceholderText (placeholderText);
410417 } else {
411418 iconWidget->setVisible (true );
@@ -420,7 +427,7 @@ void DSearchEditPrivate::_q_toEditMode(bool focus)
420427 if (focus) {
421428 animation->setDirection (QPropertyAnimation::Direction::Forward);
422429 } else {
423- action->setVisible (false );
430+ action->defaultWidget ()-> setVisible (false );
424431 animation->setDirection (QPropertyAnimation::Direction::Backward);
425432 }
426433
@@ -429,11 +436,11 @@ void DSearchEditPrivate::_q_toEditMode(bool focus)
429436 animation->start ();
430437 } else {
431438 if (focus || !q->lineEdit ()->text ().isEmpty ()) {
432- action->setVisible (true );
439+ action->defaultWidget ()-> setVisible (true );
433440 iconWidget->setVisible (false );
434441 lineEdit->setPlaceholderText (placeholderText);
435442 } else {
436- action->setVisible (false );
443+ action->defaultWidget ()-> setVisible (false );
437444 iconWidget->setVisible (true );
438445 lineEdit->setPlaceholderText (QString ());
439446 }
0 commit comments