QTableView - 如何防止选择更改

时间:2013-07-22 14:16:24

标签: c++ qt qt5

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

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

那么什么是简易解决方案?

有没有我看不到的选项?

我是否需要继承QTableView?

2 个答案:

答案 0 :(得分:3)

您可以使用QAbstractItemView::setSelectionMode(QAbstractItemView::NoSelection)

制作无法选择的视图

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

答案 1 :(得分:-1)

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