Как эффективно считать различные значения в QStandardModel - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь эффективно подсчитать различные вхождения в QStandardItemModel и отобразить результаты в QTreeWidget.В случае использования, когда модель данных содержит 6000 строк и я подсчитываю различные вхождения для элементов в 12 столбцах, это занимает ~ 7 секунд.Я хочу сделать это намного быстрее.

Следующий код показывает мою текущую реализацию:

// QTreeWidget filters contains list of distinct items in QStandardItemModel dm
// filters top items = dm column names
// filters child items = dm column distinct items
// filterCategoryToDmColumn = QMap<QString, int>  
//      maps column names to column number in model
//
// Example
//
// FileType                        // name of a column in dm
//     JPG                         // distinct item in FileType column
//     TIF                         // distinct item in FileType column

QTreeWidgetItemIterator it(filters);
while (*it) {
    // count only child items
    if ((*it)->parent()) {
        int col = filters->filterCategoryToDmColumn[(*it)->parent()->text(0)];
        QString searchValue = (*it)->text(1);
        int tot = 0;
        for (int row = 0; row < dm->rowCount(); ++row) {
            if (dm->index(row, col).data().toString() == searchValue) {
                tot++;
            }
        }
        (*it)->setData(3, Qt::EditRole, QString::number(tot));
    }
    ++it;
}
...