defuze.me
Client
|
00001 /************************************************************************** 00002 ** defuze.me Epitech Innovative Project 00003 ** 00004 ** Copyright 2010-2011 00005 ** Athena Calmettes - Jocelyn De La Rosa - Francois Gaillard 00006 ** Adrien Jarthon - Alexandre Moore - Luc Peres - Arnaud Sellier 00007 ** 00008 ** All rights reserved. 00009 **************************************************************************/ 00010 00011 #include "clearablelineedit.hpp" 00012 00013 #include <QToolButton> 00014 #include <QStyle> 00015 00016 ClearableLineEdit::ClearableLineEdit(QWidget *parent) : QLineEdit(parent) 00017 { 00018 clearButton = new QToolButton(this); 00019 QPixmap pixmap(":/icons/clear"); 00020 clearButton->setIcon(QIcon(pixmap)); 00021 clearButton->setIconSize(pixmap.size()); 00022 clearButton->setCursor(Qt::ArrowCursor); 00023 clearButton->setStyleSheet("QToolButton { border: none; padding: 0px; }"); 00024 clearButton->hide(); 00025 connect(clearButton, SIGNAL(clicked()), this, SLOT(clear())); 00026 connect(this, SIGNAL(textChanged(const QString&)), this, SLOT(updateCloseButton(const QString&))); 00027 int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); 00028 setStyleSheet(QString("QLineEdit { border-radius: 10px; padding-left: 5px; padding-right: %1px; } ").arg(clearButton->sizeHint().width() + frameWidth + 1)); 00029 QSize msz = minimumSizeHint(); 00030 setMinimumSize(qMax(msz.width(), clearButton->sizeHint().height() + frameWidth * 2 + 2), 00031 qMax(msz.height(), clearButton->sizeHint().height() + frameWidth * 2 + 2)); 00032 } 00033 00034 void ClearableLineEdit::resizeEvent(QResizeEvent *) 00035 { 00036 QSize sz = clearButton->sizeHint(); 00037 int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); 00038 clearButton->move(rect().right() - frameWidth - sz.width() - 1, 00039 (rect().bottom() + 1 - sz.height())/2); 00040 } 00041 00042 void ClearableLineEdit::updateCloseButton(const QString& text) 00043 { 00044 clearButton->setVisible(!text.isEmpty()); 00045 }