仅在某些特定单元格中显示 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单元?

Excel 2010 - 仅在小计单元格中计算唯一值

基于多个数据从单元格中添加和删除特定值

单击表格单元格后,QtableView 中的某些单元格不会自动重绘

检查单元格中的特定字母或一组字母