【问题标题】:QTableView advanced selectionQTableView高级选择
【发布时间】: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

【问题讨论】:

标签: c++ qt qtableview multipleselection


【解决方案1】:

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

[信号] QItemSelectionModel::currentColumnChanged

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

【讨论】:

  • 我没有看到这个信号。这可能会有所帮助,但是当发出此信号时,如何取消选中不需要的单元格?
  • 您可能会取消选择到目前为止已选择的所有单元格,否则可能很难取消选择选择并开始新的选择。因此,只需使用用户现在选择的单元格开始一个新的选择。
  • 是的,你是对的,谢谢。但我有一个问题。我的QTableView 中的selectionModel() 返回null。因此,我无法连接到currentColumnChanged()。是不是觉得很熟悉?
  • 你需要先设置你的模型,然后 selectionModel() 将返回一个有效的模型。如果你在 setModel() 之前查询 selectionModel() 你会得到一个 null 而不是一个有效的模型。
猜你喜欢
  • 2010-11-16
  • 2023-04-03
  • 2010-10-26
  • 2014-09-01
  • 1970-01-01
  • 2019-03-17
  • 2021-11-09
  • 2011-10-13
  • 2015-03-07
相关资源
最近更新 更多