使用QListView进行内存泄漏

时间:2015-02-16 21:09:46

标签: qt memory-leaks qlistview

我正在处理应用程序启动器并决定使用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();
}

帮助将非常感激

0 个答案:

没有答案
相关问题