Files
qt6-migration-pipeline/Lts/Common/LtsWidgets/lts_elided_label.cpp
T

61 lines
1.3 KiB
C++
Executable File

#include "lts_elided_label.h"
#include <QPaintEvent>
#include <QResizeEvent>
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);
}
}
}