我正在处理应用程序启动器并决定使用QListView来显示Items。我写了一个模型和一个ItemDelegate,但它似乎在我无法找到的地方浪费记忆。 问题是即使滚动应用列表也会使我的程序消耗越来越多的内存。 我认为这与我的绘画方式有关但我无法看出错误在哪里。
QStyledItemDelegate
上的Paint方法void DashViewItemDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const {
QString name = index.model()->data(index, Qt::DisplayRole).toString();
QIcon icon = index.model()->data(index, Qt::DecorationRole).value<QIcon>();
QRect iconRect = QRect(option.rect.x() + 10, option.rect.y(), option.rect.width() - 20, option.rect.height() - 43);
QRect textRect = QRect(option.rect.x(), option.rect.y() + 60, option.rect.width(), option.rect.height() - 60);
if (option.state & QStyle::State_Selected)
painter->fillRect(option.rect, option.palette.highlight());
icon.paint(painter, iconRect, Qt::AlignCenter | Qt::AlignTop);
QTextLayout textLayout(name);
textLayout.setFont(option.font);
int widthUsed = 0;
int lineCount = 0;
textLayout.beginLayout();
while (++lineCount < 3) {
QTextLine line = textLayout.createLine();
if (!line.isValid())
break;
line.setLineWidth(option.rect.width());
widthUsed += line.naturalTextWidth();
}
textLayout.endLayout();
widthUsed += option.rect.width();
QString newText = painter->fontMetrics().elidedText(name, Qt::ElideRight, widthUsed);
painter->drawText(textRect, Qt::AlignCenter | Qt::AlignTop | Qt::TextWordWrap , newText);
painter->save();
}
帮助将非常感激