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

来源:互联网 发布:灭罪师类似的网络剧 编辑:程序博客网 时间:2024/06/10 14:55

#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 子类会根据宽度自动加省略点 就不会出现上面的问题


1 0
原创粉丝点击