ClearLineEditAddon::ClearLineEditAddon (ICoreProxy_ptr proxy, QLineEdit *edit) : QObject (edit) , Button_ (new QToolButton (edit)) , Edit_ (edit) { const bool isRtl = QApplication::layoutDirection () == Qt::RightToLeft; const auto& icon = proxy->GetIcon (isRtl ? "edit-clear-locationbar-ltr" : "edit-clear-locationbar-rtl"); Button_->setIconSize (QSize (16, 16)); Button_->setIcon (icon); Button_->setCursor (Qt::ArrowCursor); Button_->setStyleSheet ("QToolButton { border: none; padding: 0px; }"); Button_->hide (); connect (Button_, SIGNAL (clicked ()), edit, SLOT (clear ())); connect (edit, SIGNAL (textChanged (QString)), this, SLOT (updateButton (QString))); const int frameWidth = edit->style ()->pixelMetric (QStyle::PM_DefaultFrameWidth); edit->setStyleSheet (QString ("QLineEdit { padding-right: %1px; }") .arg (Button_->sizeHint ().width () + frameWidth + 1)); const auto msz = edit->minimumSizeHint (); edit->setMinimumSize (qMax (msz.width (), Button_->sizeHint ().height () + frameWidth * 2 + 2), qMax (msz.height(), Button_->sizeHint ().height () + frameWidth * 2 + 2)); UpdatePos (); edit->installEventFilter (this); }