我有一个QTableView使用QSqlTableModel.
在底层数据库(postgresql)表中有一个时间戳列.
如何选择基础时间戳列为NULL的选择模型中的所有行?
指向正确方向的指针会有所帮助.
更新:
我遇到的主要问题是表现.我尝试过的每种方法都会导致两个性能问题.
首先是对约5,000个选定记录的SELECTModel() - > select(选择)调用需要30秒.它似乎是为每一行发出选择改变信号.即使信号处理程序被禁用,它仍然需要10秒.
第二个性能问题是即使在使用所选行更新视图后,尝试滚动视图也非常缓慢且滞后.我的猜测是选择模型由5,000个单独的选择组成,而不仅仅是最小数量的选择范围.
在我正在试验的数据中,选择是连续的; 所以它应该能够表示为单个选择范围.如果我只是调用tableView-> selectAll(),那么这非常快.
我想知道的是,是否有一种规范,有效的方法来选择一堆匹配的行.或许我的代码中存在一个导致性能下降的缺陷.有没有办法使用count0建议的QSortFilterProxyModel 来实现这个目的?我希望视图显示所有行,但选择匹配的行.
以下是我尝试的最后一个方法的代码段:
void MainWindow::selectNullTimestamp()
{
QModelIndex start = model->index(0, TIMESTAMP_COLUMN);
QModelIndexList indexes = model
->match(start, Qt::DisplayRole,
QVariant(QString("")),
-1,
Qt::MatchFixedString);
QItemSelectionModel* selection_model = ui->tableView->selectionModel();
QItemSelection selection;
foreach(QModelIndex index, indexes) {
QModelIndex left =
model->index(index.row(), 0);
QModelIndex right =
model->index(index.row(),
NUM_COLUMNS - 1);
QItemSelection sel(left, right);
selection.merge(sel, QItemSelectionModel::Select);
}
selection_model->select(selection, QItemSelectionModel::Select);
}
Run Code Online (Sandbox Code Playgroud)