#include "DictTableDelegatePainter.h" DictTableDelegatePainter::DictTableDelegatePainter(QPainter* painter, const QRect& contentRect, const QFontMetrics& fontMetrics): painter(painter), contentRect(contentRect), fontMetrics(fontMetrics) { initLoopParams(); } void DictTableDelegatePainter::initLoopParams() { offset = 0; textFitstoRect = true; } void DictTableDelegatePainter::startDrawing() { painter->save(); painter->setClipRect(contentRect); initLoopParams(); } void DictTableDelegatePainter::endDrawing() { painter->restore(); } void DictTableDelegatePainter::drawText(const QString& text) { if(!textFitstoRect) return; QString elidedText = getElidedText(text); textFitstoRect = elidedText == text; painter->drawText(contentRect.translated(offset, 0), elidedText, getTextOption()); offset += fontMetrics.width(elidedText); } void DictTableDelegatePainter::drawImage(const QString& filePath) { if(!textFitstoRect) return; QPixmap image(filePath); if(image.isNull()) image = QPixmap(":/images/broken-image.png"); image = image.scaledToHeight(ThumbnailSize, Qt::SmoothTransformation); painter->drawPixmap(contentRect.topLeft() + QPoint(offset, 0), image); offset += image.width(); } QString DictTableDelegatePainter::getElidedText(const QString& text) { return fontMetrics.elidedText(text, Qt::ElideRight, contentRect.width() - offset); } QTextOption DictTableDelegatePainter::getTextOption() { QTextOption textOption(Qt::AlignVCenter); textOption.setWrapMode(QTextOption::NoWrap); return textOption; }