我有带有自定义表格模型的 QTableView。用户可以选择表格中的行,并且在特定情况下我想防止更改当前选择。
重新选择先前选择的行不是一个理想的解决方案(发出有关更改的信号)。
那么简单的解决方案是什么?
有一些我看不到的选项吗?
我需要继承 QTableView 吗?
您可以使用QAbstractItemView::setSelectionMode(QAbstractItemView::NoSelection)使视图不可选
您也可以使用 Qt::ItemIsSelectable 在每个项目的基础上执行此操作
Qt::ItemFlags QAbstractItemModel::flags(const QModelIndex & index) const [虚拟]
编辑(评论):
您有一个自定义模型,因此您可以设置当前行成员变量。然后,覆盖标志:
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) 以再次允许信令。