QStandardItemModel:任何有效的添加行的方法?

时间:2018-01-31 06:34:57

标签: c++ qt qstandarditemmodel

我尝试使用Qt void QStandardItem::insertRow(int row, const QList<QStandardItem *> &items)void QStandardItem::appendRow(const QList<QStandardItem *> &items)在我的模型中动态添加行。对于少量行,这些花费的时间非常少。但是,对于大量的行条目,比如100,000,它需要很长时间。

I read this similar question 但它不是很有用。有没有其他方法可以更有效地完成这项工作?

1 个答案:

答案 0 :(得分:1)

感谢评论部分指出我正确的方向,我能够自己解决问题。

我尝试实现QAbstractItemModel的子类。以下是bool QAbstractItemModel::insertRows(int row, int count, const QModelIndex &parent = QModelIndex())的推论。此代码只在我的GUI中添加了空白单元格。这个想法只是为了检查细胞的加入速度:

bool CustomTableModel::insertRows(int position, int rows, const QModelIndex &parent)
{
    beginInsertRows(parent, position, position + rows - 1);
    for (int row = 0; row < rows; row++) 
    {
        QStringList items;
        for (int column = 0; column < 7; ++column)// I required only 7 columns 
            items.append("");
        rowList.insert(position, items); // QList<QStringList> rowList;
    }
    endInsertRows();
    return true;
}

此方法提高了添加新行的整体性能。但是,我的要求仍然不是很快。似乎QAbstractItemModel::beginInsertRows(const QModelIndex & parent, int first, int last)QAbstractItemModel::endInsertRows()导致了整体瓶颈。

最后,我只使用以下构造函数来创建一个包含足够多行的表:

CustomTableModel::CustomTableModel(int rows, int columns, QObject *parent): QAbstractTableModel(parent)
{
    QStringList newList;

        for (int column = 0; column < columns; column++) {
            newList.append("");
        }

        for (int row = 0; row < rows; row++) {
            rowList.append(newList); // QList<QStringList> rowList;
        }
}

然后我创建了一个自定义函数来在单元格中插入值:

void CustomTableModel::insertRowValues(int row,int col, QString val)
{
    rowList[row][col] = val;
}

重复调用此函数以填充单个单元格,创建表格的速度非常快(或至少比之前更快)。这个解决方案感觉不是很优雅,但它解决了我的问题。