我有一个带有自定义表格模型的QTableView。用户可以在表格中选择行,在特定情况下,我想阻止当前选择的更改。
重新选择先前选择的行不是理想的解决方案(会发出关于更改的信号)。
那么最简单的解决方案是什么?
是否有一些选项我没有看到?
我需要子类化QTableView吗?
您还可以使用Qt::ItemIsSelectable,以每个项目为基础进行设置。
Qt::ItemFlags QAbstractItemModel::flags(const QModelIndex & index) const [virtual]
编辑(注释):
如果您有自定义模型,则可以设置当前行成员变量。然后,重写标志:
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;
}
}
当然,dindt尝试过,但你可以理解这个想法。
更新后,如果将current_row设置为-1,则所有都可选择。
您可以重新选择之前已选中的行。在信号处理程序中,在重新选择之前调用blocksignals(true),然后再调用blocksignals(false)以允许再次发出信号。