仅在某些特定单元格中显示 QComboBox(通过 Delegate)?
Show a QComboBox (via Delegate) only in some specific cells?
我已经有一个带有自己模型的 QTreeView 和一个能够在此 QTreeView 的一列中显示 QComboBox 的委托。
现在,根据树中显示的数据,QComboBox 必须仅针对某些单元格启用和激活,而不是针对整个列。我已经发现当委托函数 createEditor() returns NULL 时,没有显示和处理任何 QComboBox。但是:createEditor() 没有附带对模型的引用,所以如果 QCombobox 必须显示或不显示,我不能要求它提供给定的索引。另一方面,我不能在委托中存储相关信息(因为它是一个通用的委托,这样的解决方案会违反视图和数据恕我直言的分离)。
那么:我怎样才能通过 createEditor() 访问模型,或者我还需要什么其他可能性来为我的 QTreeView 的某些单元格动态隐藏委托的 QComboBox?
谢谢!
您可以从 QModelIndex
中获取模型
QWidget * createEditor(QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const
{
const QAbstractItemModel * model = index.model();
//.....
}
所以您同时拥有索引和模型,我认为足以确定是否创建组合框。
从问题中不清楚其他单元格是否必须可以由另一个小部件编辑。如果不是这种情况,您可以简单地使单元格不可编辑,并在您的模型中返回正确的标志(仅对可编辑单元格包含 Qt::ItemIsEditable
。)参见 QAbstractItemModel::flags
我已经有一个带有自己模型的 QTreeView 和一个能够在此 QTreeView 的一列中显示 QComboBox 的委托。
现在,根据树中显示的数据,QComboBox 必须仅针对某些单元格启用和激活,而不是针对整个列。我已经发现当委托函数 createEditor() returns NULL 时,没有显示和处理任何 QComboBox。但是:createEditor() 没有附带对模型的引用,所以如果 QCombobox 必须显示或不显示,我不能要求它提供给定的索引。另一方面,我不能在委托中存储相关信息(因为它是一个通用的委托,这样的解决方案会违反视图和数据恕我直言的分离)。
那么:我怎样才能通过 createEditor() 访问模型,或者我还需要什么其他可能性来为我的 QTreeView 的某些单元格动态隐藏委托的 QComboBox?
谢谢!
您可以从 QModelIndex
QWidget * createEditor(QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const
{
const QAbstractItemModel * model = index.model();
//.....
}
所以您同时拥有索引和模型,我认为足以确定是否创建组合框。
从问题中不清楚其他单元格是否必须可以由另一个小部件编辑。如果不是这种情况,您可以简单地使单元格不可编辑,并在您的模型中返回正确的标志(仅对可编辑单元格包含 Qt::ItemIsEditable
。)参见 QAbstractItemModel::flags