C++ QTableView-如何防止选择更改
我有一个自定义表格模型的QTableView。用户可以选择表中的行,在特定情况下,我希望阻止更改当前选择 重新选择以前选择的行不是理想的解决方案(发出有关更改的信号) 那么,什么是简单的解决方案 有什么我看不到的选择吗C++ QTableView-如何防止选择更改,c++,qt,qt5,C++,Qt,Qt5,我有一个自定义表格模型的QTableView。用户可以选择表中的行,在特定情况下,我希望阻止更改当前选择 重新选择以前选择的行不是理想的解决方案(发出有关更改的信号) 那么,什么是简单的解决方案 有什么我看不到的选择吗 是否需要将QTableView子类化?您可以使用使视图不可选择 您也可以使用Qt::ItemIsSelectable在每个项目的基础上完成这项工作 编辑(评论): 您有一个自定义模型,因此可以设置当前行成员变量。然后,覆盖标志: Qt::ItemFlags YourModel:
是否需要将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)以允许再次发送信号。但是选择更改的信号将在第一次更改时被触发(但不是在重新选择时),这仅部分起作用。它不允许选择其他行,但当我单击时,当前选定的行将被取消选中。我想保留我原来的选择。我给了你两个选择。使用第二个覆盖标志(),可以使每个项都不可选择,但可以选择当前行的项。我将用一个例子更新我的帖子。我理解并测试了这个解决方案——但正如我所说的——当我点击一个不可选择的行时,我失去了我原来的选择。好吧,那么我认为唯一的方法必须是过滤视口的点击事件。你找到过满意的解决方案吗?