4

我有带有自定义表格模型的 QTableView。用户可以选择表格中的行,并且在特定情况下我想防止更改当前选择。

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

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

有一些我看不到的选项吗?

我需要继承 QTableView 吗?

4

2 回答 2

3

您可以使用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,则所有选项都是可选的

于 2013-07-22T14:20:22.570 回答
-1

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

于 2013-07-22T14:21:56.603 回答