#include "elidedlabel.h" #include #include #include #include ElidedLabel::ElidedLabel(QWidget* parent, Qt::WindowFlags f) : QLabel(parent, f), m_elide_mode(Qt::ElideRight) { setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred); } ElidedLabel::ElidedLabel(const QString& txt, QWidget* parent, Qt::WindowFlags f) : QLabel(txt, parent, f), m_elide_mode(Qt::ElideRight) { setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred); } ElidedLabel::ElidedLabel(const QString& txt, Qt::TextElideMode elideMode, QWidget* parent, Qt::WindowFlags f) : QLabel(txt, parent, f), m_elide_mode(elideMode) { setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred); } void ElidedLabel::setText(const QString& txt) { QLabel::setText(txt); cacheElidedText(geometry().width()); setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred); } void ElidedLabel::cacheElidedText(int w) { m_cached_elided_text = fontMetrics().elidedText(text(), m_elide_mode, w, (buddy() == nullptr)? 0 : Qt::TextShowMnemonic); } void ElidedLabel::resizeEvent(QResizeEvent* e) { QLabel::resizeEvent(e); cacheElidedText(e->size().width()); } void ElidedLabel::paintEvent(QPaintEvent* e) { if(m_elide_mode == Qt::ElideNone) { QLabel::paintEvent(e); } else { QPainter p(this); p.drawText(0, 0, geometry().width(), geometry().height(), QStyle::visualAlignment(text().isRightToLeft()? Qt::RightToLeft : Qt::LeftToRight, alignment()) | ((buddy() == nullptr)? 0 : Qt::TextShowMnemonic), m_cached_elided_text); } }