QTableView高级选择

Posted

技术标签:

【中文标题】QTableView高级选择【英文标题】:QTableView advanced selection 【发布时间】:2013-02-28 08:01:48 【问题描述】:

我使用 QTableView,我想开发一种高级选择模式。我没有设法用SelectionBehaviorSelectionMode 做到这一点。

用户应该能够选择一些单元格,但前提是它们属于同一列:

有效行为

无效行为

锦上添花是为了防止最后一行(黄色)被选中。

有什么解决办法吗?


编辑 - 2013/03/05

我无法让它工作:

ui->table->setSelectionBehavior(QAbstractItemView::SelectItems);
ui->table->setSelectionMode(QAbstractItemView::MultiSelection);

connect(ui->table->selectionModel(), SIGNAL(currentColumnChanged(QModelIndex,QModelIndex)), ui->table->selectionModel(), SLOT(clearSelection()));

这段代码有什么问题?我也试过QAbstractItemView::ExtendedSelectionQAbstractItemView::ContiguousSelection

【问题讨论】:

相关问题:How to limit the selection in a QTableWidget. 【参考方案1】:

您是否检查过来自 QItemSelectionModel 的信号,尤其是

[信号] QItemSelectionModel::currentColumnChanged

可用于开始一个新的选择,以防当前选择扩展到两列。

【讨论】:

我没有看到这个信号。这可能会有所帮助,但是当发出此信号时,如何取消选中不需要的单元格? 您可能会取消选择到目前为止已选择的所有单元格,否则可能很难取消选择选择并开始新的选择。因此,只需使用用户现在选择的单元格开始一个新的选择。 是的,你是对的,谢谢。但我有一个问题。我的QTableView 中的selectionModel() 返回null。因此,我无法连接到currentColumnChanged()。是不是觉得很熟悉? 你需要先设置你的模型,然后 selectionModel() 将返回一个有效的模型。如果你在 setModel() 之前查询 selectionModel() 你会得到一个 null 而不是一个有效的模型。

以上是关于QTableView高级选择的主要内容,如果未能解决你的问题,请参考以下文章

QTableView 没有选择

QTableView - 没有得到选择改变信号

QTableView() 仅在选择时更新更改

QTableView 禁用选择单列

使用 QSortFilterProxyModel 过滤 QTableView 后保留选择

PyQt4 - QTableView - 如何循环 QTableView