QTableView高级选择
Posted
技术标签:
【中文标题】QTableView高级选择【英文标题】:QTableView advanced selection 【发布时间】:2013-02-28 08:01:48 【问题描述】:我使用 QTableView,我想开发一种高级选择模式。我没有设法用SelectionBehavior
和SelectionMode
做到这一点。
用户应该能够选择一些单元格,但前提是它们属于同一列:
有效行为: 无效行为:锦上添花是为了防止最后一行(黄色)被选中。
有什么解决办法吗?
编辑 - 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::ExtendedSelection
和QAbstractItemView::ContiguousSelection
。
【问题讨论】:
相关问题:How to limit the selection in a QTableWidget. 【参考方案1】:您是否检查过来自 QItemSelectionModel 的信号,尤其是
[信号] QItemSelectionModel::currentColumnChanged
可用于开始一个新的选择,以防当前选择扩展到两列。
【讨论】:
我没有看到这个信号。这可能会有所帮助,但是当发出此信号时,如何取消选中不需要的单元格? 您可能会取消选择到目前为止已选择的所有单元格,否则可能很难取消选择选择并开始新的选择。因此,只需使用用户现在选择的单元格开始一个新的选择。 是的,你是对的,谢谢。但我有一个问题。我的QTableView
中的selectionModel()
返回null。因此,我无法连接到currentColumnChanged()
。是不是觉得很熟悉?
你需要先设置你的模型,然后 selectionModel() 将返回一个有效的模型。如果你在 setModel() 之前查询 selectionModel() 你会得到一个 null 而不是一个有效的模型。以上是关于QTableView高级选择的主要内容,如果未能解决你的问题,请参考以下文章