60 painter->setRenderHint(QPainter::SmoothPixmapTransform,
true);
68 if(preview.isNull()) {
72 QRect paintRect = option.rect.adjusted(1, 1, -1, -1);
74 qreal devicePixelRatioF = painter->device()->devicePixelRatioF();
77 QImage previewHighDPI =
79 paintRect.size() * devicePixelRatioF,
80 Qt::IgnoreAspectRatio,
81 Qt::SmoothTransformation);
82 previewHighDPI.setDevicePixelRatio(devicePixelRatioF);
83 painter->drawImage(paintRect.x(), paintRect.y(), previewHighDPI);
85 if (option.state & QStyle::State_Selected) {
86 painter->setCompositionMode(QPainter::CompositionMode_Overlay);
87 painter->setOpacity(0.5);
88 painter->fillRect(paintRect, Qt::white);
89 painter->setCompositionMode(QPainter::CompositionMode_SourceOver);
90 painter->setOpacity(1.0);
91 painter->setPen(QPen(option.palette.highlight(), 2, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin));
92 QRect selectedBorder = option.rect.adjusted(1, 1, -1, -1);
93 painter->drawRect(selectedBorder);
96 QSize previewSize(paintRect.height(), paintRect.height());
98 QImage previewHighDPI =
100 previewSize * devicePixelRatioF,
101 Qt::IgnoreAspectRatio,
102 Qt::SmoothTransformation);
103 previewHighDPI.setDevicePixelRatio(devicePixelRatioF);
105 if (option.state & QStyle::State_Selected) {
106 painter->setPen(QPen(option.palette.highlight(), 2.0));
107 painter->fillRect(option.rect, option.palette.highlight());
108 painter->setPen(option.palette.highlightedText().color());
110 painter->drawImage(paintRect.x(), paintRect.y(), previewHighDPI);
116 QFont font = option.font;
118 painter->setFont(font);
119 QRectF titleRect(QPointF(previewSize.width() + leftMargin, paintRect.y() + vertMargin),
120 QPointF(paintRect.width() - rightMargin, paintRect.y() + descOffset + painter->fontMetrics().lineSpacing()));
121 painter->drawText(titleRect, Qt::AlignLeft,
122 painter->fontMetrics().elidedText(
123 name, Qt::ElideRight, titleRect.width()
126 const QString descriptionKey =
"description";
129 if (!description.isEmpty() && !description.isNull()) {
130 font.setPointSize(font.pointSize()-1);
132 font.setStyle(QFont::StyleItalic);
133 painter->setFont(font);
134 QRectF descRect(QPointF(previewSize.width() + leftMargin, paintRect.y() + descOffset + painter->fontMetrics().lineSpacing()),
135 QPointF(paintRect.right() - rightMargin, paintRect.bottom() - vertMargin));
137 int numLines = floor(((
float)descRect.height() / (
float)painter->fontMetrics().lineSpacing()));
140 QTextLayout textLayout(description);
141 textLayout.beginLayout();
142 for (
int i = 0; i < numLines; i++) {
143 QTextLine line = textLayout.createLine();
144 if (line.isValid()) {
145 line.setLineWidth(descRect.width());
146 elideWidth += line.naturalTextWidth();
150 QString elidedText = painter->fontMetrics().elidedText(description, Qt::ElideRight, elideWidth);
151 painter->drawText(descRect, Qt::AlignLeft|Qt::TextWordWrap, elidedText);