From 2f2d38147445dbb78380f7b06adcc1d5344c9c52 Mon Sep 17 00:00:00 2001 From: codestation Date: Sun, 29 Dec 2013 22:01:32 -0430 Subject: [PATCH] Fix lineedit resizing on focus. --- src/filterlineedit.cpp | 25 ++++++++++++++++++++----- src/filterlineedit.h | 1 + src/forms/backupmanagerform.ui | 2 +- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/filterlineedit.cpp b/src/filterlineedit.cpp index 0119926..282891b 100644 --- a/src/filterlineedit.cpp +++ b/src/filterlineedit.cpp @@ -25,14 +25,24 @@ FilterLineEdit::FilterLineEdit(QWidget *parent) : QLineEdit(parent) { + int frame_width = frameWidth(); clearButton = new QToolButton(this); QIcon clearIcon(":/main/resources/images/edit-clear-locationbar-rtl.png"); clearButton->setIcon(clearIcon); + clearButton->setIconSize(QSize(sizeHint().height() - 4 * frame_width, + sizeHint().height() - 4 * frame_width)); clearButton->setCursor(Qt::ArrowCursor); - clearButton->setStyleSheet("border:none;padding:0px"); + clearButton->setStyleSheet("QToolButton { border:none; padding:0px; }"); clearButton->hide(); connect(clearButton, SIGNAL(clicked()), this, SLOT(clear())); connect(this, SIGNAL(textChanged(const QString&)), this, SLOT(updateCloseButton(const QString&))); + + setStyleSheet(QString("LineEdit { color:black; font-style:normal; padding-right:%1px; }").arg( + clearButton->sizeHint().width() + frame_width + 1)); + + QSize min_size_hint = minimumSizeHint(); + setMinimumSize(qMax(min_size_hint.width(), clearButton->sizeHint().height() + frame_width), + qMax(min_size_hint.height(), clearButton->sizeHint().height() + frame_width)); } void FilterLineEdit::updateCloseButton(const QString& text) @@ -46,11 +56,11 @@ void FilterLineEdit::updateCloseButton(const QString& text) void FilterLineEdit::focusInEvent(QFocusEvent *e) { - if(this->styleSheet() == "color:gray;font-style:italic") { + if(this->styleSheet() == "FilterLineEdit { color:gray; font-style:italic; }") { this->clear(); } - this->setStyleSheet(QString("color:black;font-style:normal;padding-right:%1").arg(clearButton->sizeHint().width())); + setStyleSheet(QString("FilterLineEdit { color:black; font-style:normal; padding-right:%1px; }").arg(clearButton->sizeHint().width() + frameWidth() + 1)); QLineEdit::focusInEvent(e); } @@ -59,16 +69,21 @@ void FilterLineEdit::focusOutEvent(QFocusEvent *e) { if(this->text().isEmpty()) { this->setText(tr("Filter")); - this->setStyleSheet("color:gray;font-style:italic"); + this->setStyleSheet("FilterLineEdit { color:gray; font-style:italic; }"); } QLineEdit::focusOutEvent(e); } +int FilterLineEdit::frameWidth() const +{ + return style()->pixelMetric(QStyle::PM_DefaultFrameWidth, 0, this); +} + void FilterLineEdit::resizeEvent(QResizeEvent *e) { QSize sz = clearButton->sizeHint(); - clearButton->move(rect().right() - sz.width(), (rect().bottom() - sz.height()) / 2); + clearButton->move(rect().right() - sz.width(), rect().bottom() - sz.height() + frameWidth()); QLineEdit::resizeEvent(e); } diff --git a/src/filterlineedit.h b/src/filterlineedit.h index 78cb6fe..c576829 100644 --- a/src/filterlineedit.h +++ b/src/filterlineedit.h @@ -34,6 +34,7 @@ protected: void focusInEvent(QFocusEvent *e); void focusOutEvent(QFocusEvent *e); void resizeEvent(QResizeEvent *e); + int frameWidth() const; private: QToolButton *clearButton; diff --git a/src/forms/backupmanagerform.ui b/src/forms/backupmanagerform.ui index 24555ba..c8b4505 100644 --- a/src/forms/backupmanagerform.ui +++ b/src/forms/backupmanagerform.ui @@ -116,7 +116,7 @@ - color:gray;font-style:italic + FilterLineEdit { color:gray; font-style:italic; } Filter