feat: create delegate for project item views
This allows us to define custom painting for list view items. In particular, this is applied to the mod downloader, in order to allow displaying both the mod name and mod description, and settings their effects (like bold or underline) independent of each other. Signed-off-by: flow <flowlnlnln@gmail.com>
This commit is contained in:
parent
0f61f5ba03
commit
4a13dbe3bb
8 changed files with 139 additions and 24 deletions
|
@ -1,27 +1,33 @@
|
|||
#include "Common.h"
|
||||
|
||||
// Origin: Qt
|
||||
QStringList viewItemTextLayout(QTextLayout &textLayout, int lineWidth, qreal &height,
|
||||
qreal &widthUsed)
|
||||
// More specifically, this is a trimmed down version on the algorithm in:
|
||||
// https://code.woboq.org/qt5/qtbase/src/widgets/styles/qcommonstyle.cpp.html#846
|
||||
QList<std::pair<qreal, QString>> viewItemTextLayout(QTextLayout& textLayout, int lineWidth, qreal& height)
|
||||
{
|
||||
QStringList lines;
|
||||
QList<std::pair<qreal, QString>> lines;
|
||||
height = 0;
|
||||
widthUsed = 0;
|
||||
|
||||
textLayout.beginLayout();
|
||||
|
||||
QString str = textLayout.text();
|
||||
while (true)
|
||||
{
|
||||
while (true) {
|
||||
QTextLine line = textLayout.createLine();
|
||||
|
||||
if (!line.isValid())
|
||||
break;
|
||||
if (line.textLength() == 0)
|
||||
break;
|
||||
|
||||
line.setLineWidth(lineWidth);
|
||||
line.setPosition(QPointF(0, height));
|
||||
|
||||
height += line.height();
|
||||
lines.append(str.mid(line.textStart(), line.textLength()));
|
||||
widthUsed = qMax(widthUsed, line.naturalTextWidth());
|
||||
|
||||
lines.append(std::make_pair(line.naturalTextWidth(), str.mid(line.textStart(), line.textLength())));
|
||||
}
|
||||
|
||||
textLayout.endLayout();
|
||||
|
||||
return lines;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue