小编Kar*_*and的帖子

如何有效地选择符合特定条件的QTableView的行子集?

我有一个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)

c++ model-view-controller qt qt4

5
推荐指数
1
解决办法
6486
查看次数

标签 统计

c++ ×1

model-view-controller ×1

qt ×1

qt4 ×1