您的位置:首页 > 编程语言 > Qt开发

Qt QLineEdit 根据拉伸宽度自动加省略点

2016-04-15 09:35 549 查看
#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 子类会根据宽度自动加省略点 就不会出现上面的问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Qt