禁用(灰显)QTreeView 中的某些行

Posted

技术标签:

【中文标题】禁用(灰显)QTreeView 中的某些行【英文标题】:Disable (grey-out) some rows in a QTreeView 【发布时间】:2016-02-02 09:21:06 【问题描述】:

我有一个(非常简单的)QTreeView 显示一些行:

m_cameraModel = new QStandardItemModel(this);
QSortFilterProxyModel* cameraProxyModel = new QSortFilterProxyModel(this);
cameraProxyModel->setSourceModel(m_cameraModel);
ui.CameraTreeView->setModel(cameraProxyModel);

m_cameraModel->appendRow(new QStandardItem("Panavision"));
m_cameraModel->appendRow(new QStandardItem("Panaflex"));

在这里,我想禁用第一行“Panavision”,使其仍然可见,但无法再选择,并且以某种方式变灰,以便用户可以看到此条目未激活。

这可能是某种初学者的问题,但如何做到这一点?

谢谢!

【问题讨论】:

【参考方案1】:

我会尝试通过以下方式做到这一点:

// Get item that corresponds to the first row
QStandardItem *item = m_cameraModel->item(0, 0);
// Disable the item.
item->setFlags(Qt::NoItemFlags);

【讨论】:

也许您还想使用 QStandardItem::setForeground() 和 QStandardItem::setBackground() 设置文本和/或背景颜色。 需要的标志是Qt::ItemIsEnabled 只要没有设置,该项目将被禁用。【参考方案2】:

您想使用QItemDelegate 类,它允许您禁用您想要的行以及其他内容。 *** 上有一个很好的问题,展示了如何做一个非常基本的示例:How to set a delegate for a single cell in Qt item view?

【讨论】:

以上是关于禁用(灰显)QTreeView 中的某些行的主要内容,如果未能解决你的问题,请参考以下文章

如何在不禁用标签的情况下灰显标签?

extjs 表单元素中的 Extjs 组合框在禁用时未灰显

如何启用/禁用基于事件的 QTreeView 中的项目?

如何隐藏 QTreeView 中的某些列? [复制]

更改 QTreeView 中的某些数据

如何在 Tkinter 中禁用(灰显)一个 Checkbutton?