C++ QTableView-如何防止选择更改

C++ QTableView-如何防止选择更改,c++,qt,qt5,C++,Qt,Qt5,我有一个自定义表格模型的QTableView。用户可以选择表中的行,在特定情况下,我希望阻止更改当前选择 重新选择以前选择的行不是理想的解决方案(发出有关更改的信号) 那么,什么是简单的解决方案 有什么我看不到的选择吗 是否需要将QTableView子类化?您可以使用使视图不可选择 您也可以使用Qt::ItemIsSelectable在每个项目的基础上完成这项工作 编辑(评论): 您有一个自定义模型,因此可以设置当前行成员变量。然后,覆盖标志: Qt::ItemFlags YourModel:

我有一个自定义表格模型的QTableView。用户可以选择表中的行,在特定情况下,我希望阻止更改当前选择

重新选择以前选择的行不是理想的解决方案(发出有关更改的信号)

那么,什么是简单的解决方案

有什么我看不到的选择吗


是否需要将QTableView子类化?

您可以使用使视图不可选择

您也可以使用Qt::ItemIsSelectable在每个项目的基础上完成这项工作

编辑(评论):

您有一个自定义模型,因此可以设置当前行成员变量。然后,覆盖标志:

Qt::ItemFlags YourModel::flags(const QModelIndex & index) const
{
  if( _current_row  > 0 && index.row()  != _current_row)
  {
    return QAbstractItemModel::flags() | ^Qt::ItemIsSelectable;
  }
  else
  {
    return QAbstractItemModel::flags() | Qt::ItemIsSelectable;
  }

}
当然,丁特试过了,但你明白了


更新后,如果将当前_行设置为-1,则所有行都可选择

您可以重新选择以前选择的行。在信号处理程序中,在重新选择之前调用blocksignals(true),然后调用blocksignals(false)以允许再次发送信号。

但是选择更改的信号将在第一次更改时被触发(但不是在重新选择时),这仅部分起作用。它不允许选择其他行,但当我单击时,当前选定的行将被取消选中。我想保留我原来的选择。我给了你两个选择。使用第二个覆盖标志(),可以使每个项都不可选择,但可以选择当前行的项。我将用一个例子更新我的帖子。我理解并测试了这个解决方案——但正如我所说的——当我点击一个不可选择的行时,我失去了我原来的选择。好吧,那么我认为唯一的方法必须是过滤视口的点击事件。你找到过满意的解决方案吗?