Qt QLineEdit 根據拉伸寬度自動加省略點
阿新 • • 發佈:2019-02-17
#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 子類會根據寬度自動加省略點 就不會出現上面的問題