#include <QLineEdit>
class ElidedQLineEdit : public QLineEdit
{
Q_OBJECT
public:
explicit ElidedQLineEdit(QWidget *parent=0);
explicit ElidedQLineEdit(const QString &text, QWidget *parent=0);
void setText(const QString &text);
void setFullText(const QString &text);
void setTextLimitShrink(const QString &text, int width);
void setTextLimitExpand(const QString &text);
QString fullText() const;
protected:
void paintEvent(QPaintEvent *);
private:
void elideText();
private:
QString m_fullText;
};
ElidedQLineEdit::ElidedQLineEdit(QWidget *parent)
: QLineEdit(parent)
{
this->setMinimumWidth(0);
}
ElidedQLineEdit::ElidedQLineEdit(const QString &text, QWidget *parent)
: QLineEdit(text, parent), m_fullText(text)
{
this->setMinimumWidth(0);
}
void ElidedQLineEdit::setText(const QString &text)
{
setFullText(text);
}
void ElidedQLineEdit::setFullText(const QString &text)
{
m_fullText = text;
update();
}
void ElidedQLineEdit::setTextLimitShrink(const QString &text, int width)
{
this->setMinimumWidth(qMin(this->fontMetrics().width(text), width));
setFullText(text);
}
void ElidedQLineEdit::setTextLimitExpand(const QString &text)
{
int textWidth = this->fontMetrics().width(text);
this->setMaximumWidth(textWidth);
setFullText(text);
}
QString ElidedQLineEdit::fullText() const
{
return m_fullText;
}
void ElidedQLineEdit::paintEvent(QPaintEvent *event)
{
QLineEdit::paintEvent(event);
elideText();
}
void ElidedQLineEdit::elideText()
{
QFontMetrics fm = this->fontMetrics();
int dif = fm.width(m_fullText) - this->width();
if (dif > 0)
{
QString showText = fm.elidedText(m_fullText, Qt::ElideRight, this->width());
QLineEdit::setText(showText);
} else
{
QLineEdit::setText(m_fullText);
}
}
http://blog.csdn.net/tujiaw/article/details/44983201 实现了QLabel的子类,使其根据宽度自动加省略点和ToolTip。 但是发现当开始显示字符串的宽度小于QLabel控件的宽度时字符串会正常显示,但把QLabel宽度缩小至小于QLabel宽度后,还是会显示完整的字符串,没有截断字符串并加省略点
实现QLineEdit 子类会根据宽度自动加省略点 就不会出现上面的问题