Fix lineedit resizing on focus.

This commit is contained in:
codestation
2013-12-29 22:01:32 -04:30
parent 81e3545f29
commit 2f2d381474
3 changed files with 22 additions and 6 deletions

View File

@@ -25,14 +25,24 @@
FilterLineEdit::FilterLineEdit(QWidget *parent) : FilterLineEdit::FilterLineEdit(QWidget *parent) :
QLineEdit(parent) QLineEdit(parent)
{ {
int frame_width = frameWidth();
clearButton = new QToolButton(this); clearButton = new QToolButton(this);
QIcon clearIcon(":/main/resources/images/edit-clear-locationbar-rtl.png"); QIcon clearIcon(":/main/resources/images/edit-clear-locationbar-rtl.png");
clearButton->setIcon(clearIcon); clearButton->setIcon(clearIcon);
clearButton->setIconSize(QSize(sizeHint().height() - 4 * frame_width,
sizeHint().height() - 4 * frame_width));
clearButton->setCursor(Qt::ArrowCursor); clearButton->setCursor(Qt::ArrowCursor);
clearButton->setStyleSheet("border:none;padding:0px"); clearButton->setStyleSheet("QToolButton { border:none; padding:0px; }");
clearButton->hide(); clearButton->hide();
connect(clearButton, SIGNAL(clicked()), this, SLOT(clear())); connect(clearButton, SIGNAL(clicked()), this, SLOT(clear()));
connect(this, SIGNAL(textChanged(const QString&)), this, SLOT(updateCloseButton(const QString&))); 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) void FilterLineEdit::updateCloseButton(const QString& text)
@@ -46,11 +56,11 @@ void FilterLineEdit::updateCloseButton(const QString& text)
void FilterLineEdit::focusInEvent(QFocusEvent *e) 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->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); QLineEdit::focusInEvent(e);
} }
@@ -59,16 +69,21 @@ void FilterLineEdit::focusOutEvent(QFocusEvent *e)
{ {
if(this->text().isEmpty()) { if(this->text().isEmpty()) {
this->setText(tr("Filter")); this->setText(tr("Filter"));
this->setStyleSheet("color:gray;font-style:italic"); this->setStyleSheet("FilterLineEdit { color:gray; font-style:italic; }");
} }
QLineEdit::focusOutEvent(e); QLineEdit::focusOutEvent(e);
} }
int FilterLineEdit::frameWidth() const
{
return style()->pixelMetric(QStyle::PM_DefaultFrameWidth, 0, this);
}
void FilterLineEdit::resizeEvent(QResizeEvent *e) void FilterLineEdit::resizeEvent(QResizeEvent *e)
{ {
QSize sz = clearButton->sizeHint(); 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); QLineEdit::resizeEvent(e);
} }

View File

@@ -34,6 +34,7 @@ protected:
void focusInEvent(QFocusEvent *e); void focusInEvent(QFocusEvent *e);
void focusOutEvent(QFocusEvent *e); void focusOutEvent(QFocusEvent *e);
void resizeEvent(QResizeEvent *e); void resizeEvent(QResizeEvent *e);
int frameWidth() const;
private: private:
QToolButton *clearButton; QToolButton *clearButton;

View File

@@ -116,7 +116,7 @@
<item> <item>
<widget class="FilterLineEdit" name="filterLineEdit"> <widget class="FilterLineEdit" name="filterLineEdit">
<property name="styleSheet"> <property name="styleSheet">
<string notr="true">color:gray;font-style:italic</string> <string notr="true">FilterLineEdit { color:gray; font-style:italic; }</string>
</property> </property>
<property name="text"> <property name="text">
<string>Filter</string> <string>Filter</string>