我试图有效地计数QStandardItemModel中的不同事件,并将结果显示在QTreeWidget中。在一个数据模型包含6,000行且用我计算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;
}