コード例 #1
0
	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);
	}