我需要以编程方式在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);
迭代本身也几乎是即时的。只选择有问题。我感谢任何帮助。
答案 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++ 不会有问题。