#include "lts_elided_label.h" #include #include namespace LtsWidgets { void LtsElidedLabel::setElideMode(Qt::TextElideMode elideMode) { m_elideMode = elideMode; m_cachedText.clear(); update(); } void LtsElidedLabel::resizeEvent(QResizeEvent *e) { QLabel::resizeEvent(e); m_cachedText.clear(); } void LtsElidedLabel::paintEvent(QPaintEvent *e) { if (m_elideMode == Qt::ElideNone) return QLabel::paintEvent(e); updateCachedTexts(); QLabel::setText(m_cachedElidedText); QLabel::paintEvent(e); QLabel::setText(m_cachedText); } void LtsElidedLabel::updateCachedTexts() { const auto txt = text(); if (m_cachedText == txt) return; m_cachedText = txt; const QFontMetrics fm(fontMetrics()); m_cachedElidedText = fm.elidedText(text(), m_elideMode, width(), Qt::TextShowMnemonic); if (!m_cachedText.isEmpty()) { const QString showFirstCharacter = m_cachedText.at(0) + QStringLiteral("..."); #if QT_VERSION < QT_VERSION_CHECK(5, 11, 0) const int width = fm.width(showFirstCharacter); #else const int width = fm.horizontalAdvance(showFirstCharacter); #endif setMinimumWidth(width + 1); } } }