禁用(灰显)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 中的某些行的主要内容,如果未能解决你的问题,请参考以下文章