QTableView模型内存不足

时间:2019-04-02 19:41:52

标签: qt model qtableview qabstracttablemodel

使用带有大量项目的QTableView + QAbstractTableModel时,内存不足会崩溃。

问题似乎来自垂直标题视图。它尝试分配与行数相同的QVector(1.5亿)。

如何在不破坏表的情况下在模型中使用数百万行?

这里是重现该问题的示例。

class MiniModel : public QAbstractTableModel
{
Q_OBJECT

public:
    MiniModel(QObject * parent = nullptr);
    int columnCount(QModelIndex const &parent = QModelIndex()) const override;
    int rowCount(QModelIndex const &parent = QModelIndex()) const override;
    QVariant data(QModelIndex const &index, int role = Qt::DisplayRole) const override;
    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
};

MiniModel::MiniModel(QObject * parent) : QAbstractTableModel(parent)
{
}

int MiniModel::columnCount(QModelIndex const & parent) const
{
    return 1;
}

int MiniModel::rowCount(QModelIndex const & parent) const
{
    return 150000000;
}

QVariant MiniModel::data(QModelIndex const & index, int role) const
{
    if (role == Qt::DisplayRole)
        return 23; // just return 23 in all cells
    else
        return QVariant();
}

QVariant MiniModel::headerData(int section, Qt::Orientation orientation, int role) const
{
    if (section == 0 && role == Qt::DisplayRole && orientation == Qt::Horizontal)
        return "Dummy";
    else
        return QVariant();
}

0 个答案:

没有答案