仅在某些特定单元格中显示 QComboBox(通过委托)?
Posted
技术标签:
【中文标题】仅在某些特定单元格中显示 QComboBox(通过委托)?【英文标题】:Show a QComboBox (via Delegate) only in some specific cells? 【发布时间】:2016-08-19 11:57:00 【问题描述】:我已经有一个 QTreeView,它有一个自己的模型和一个能够在此 QTreeView 的一列中显示 QComboBox 的委托。
现在取决于树中显示的数据,QComboBox 必须仅对某些单元格启用和激活,而不是为整个列启用和激活。我已经发现,当委托的函数 createEditor() 返回 NULL 时,没有显示和处理 QComboBox。但是: createEditor() 没有对模型的引用,所以如果 QCombobox 必须显示或不显示,我不能要求它提供给定的索引。另一方面,我无法将相关信息存储在委托中(因为它是通用的,并且这样的解决方案会违反视图和数据之间的分离恕我直言)。
那么:我如何从 createEditor() 中访问模型,或者我必须为我的 QTreeView 的某些单元格动态隐藏委托的 QComboBox?
谢谢!
【问题讨论】:
【参考方案1】:您可以从QModelIndex
获取模型
QWidget * createEditor(QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const
const QAbstractItemModel * model = index.model();
//.....
所以你有索引和模型,我认为足以确定是否创建组合框。
从问题中不清楚其他单元格是否必须由另一个小部件编辑。如果不是这种情况,您可以简单地使单元格不可编辑,并在模型中返回正确的标志(包括 Qt::ItemIsEditable
仅用于可编辑单元格。)请参阅 QAbstractItemModel::flags
【讨论】:
以上是关于仅在某些特定单元格中显示 QComboBox(通过委托)?的主要内容,如果未能解决你的问题,请参考以下文章
仅在单元格中的特定 UIImage 上从 UITableView 推送详细信息视图?
如何使用QCombobox选择更新QTableView单元?