QTableWidget选择行太慢

时间:2018-05-09 16:34:27

标签: qt

我需要以编程方式在QTableWidget中选择行。我找到了三种方法,但它们都很慢。同时a可以通过CTRL + A或SHIFT +鼠标点击立即选择数千或行。

我的代码是:

// tw is QTableWidget
tw->blockSignals(true); // Disable all signals for testing
// Need to select multiple rows without resetting selection
tw->setSelectionMode(QAbstractItemView::MultiSelection);

for(int i = 0; i < tw->rowCount(); i++)
{
    if(conditionForSelection)
    {
        // Next line is very slow. It takes minutes to select
        // thousands of rows
        //tw->selectRow(i);

        // Very slow too
        // tw->item(i, 0)->setSelected(true);

        // This line is faster but it still takes tens of seconds
        tw->setCurrentIndex(tw->model()->index(i, 0));
    }
}

// return normal selection behavior and signals
tw->setSelectionMode(QAbstractItemView::ExtendedSelection);
tw->blockSignals(false);

迭代本身也几乎是即时的。只选择有问题。我感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您是否只需要选择一个子集或全部?

总之,有onlyValue.add(new Node<T>(tmp));

如果只是一个子集,您是否尝试过选择模型? QTableWidget::selectAll()

答案 1 :(得分:0)

遇到同样的问题,我建议将所有需要选择的索引存储在集合中,并且(您也可以对取消选择的索引执行相同操作)使用

self.selectionModel().select(QItemSelection(selected_indexes[0],selected_indexes[-1]),QItemSelectionModel.Select) 

示例是用 PyQt 编写的,我相信将其更改为 C++ 不会有问题。