QLabel根据拉伸宽度自动加省略点和ToolTip

来源:互联网 发布:怎么删淘宝评论 编辑:程序博客网 时间:2024/06/05 08:35
#pragma  once#include <QLabel>class ElidedLabel : public QLabel{Q_OBJECTpublic:explicit ElidedLabel(QWidget *parent=0, Qt::WindowFlags f=0);explicit ElidedLabel(const QString &text, QWidget *parent=0, Qt::WindowFlags f=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;};

#include "elidedlabel.h"#include <QtWidgets>ElidedLabel::ElidedLabel(QWidget *parent, Qt::WindowFlags f): QLabel(parent, f){this->setMinimumWidth(0);setTextFormat(Qt::PlainText);}ElidedLabel::ElidedLabel(const QString &text, QWidget *parent, Qt::WindowFlags f): QLabel(text, parent, f), m_fullText(text){this->setMinimumWidth(0);setTextFormat(Qt::PlainText);}void ElidedLabel::setText(const QString &text){setFullText(text);}void ElidedLabel::setFullText(const QString &text){m_fullText = text;update();}void ElidedLabel::setTextLimitShrink(const QString &text, int width){this->setMinimumWidth(qMin(this->fontMetrics().width(text), width));setFullText(text);}void ElidedLabel::setTextLimitExpand(const QString &text){int textWidth = this->fontMetrics().width(text);this->setMaximumWidth(textWidth);setFullText(text);}QString ElidedLabel::fullText() const{return m_fullText;}void ElidedLabel::paintEvent(QPaintEvent *event){QLabel::paintEvent(event);elideText();}void ElidedLabel::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());QLabel::setText(showText);if (showText != m_fullText) {this->setToolTip(m_fullText.left(1024));} else {this->setToolTip("");}} else {QLabel::setText(m_fullText);this->setToolTip("");}}

1.注意它的水平拉伸策略,需要expand

2.注意控件本身的padding, margin值它会影响width(包括了一些空白部分),所以不要设置这两个值。

0 0
原创粉丝点击