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

禁用(灰显)QTreeView中的某些行,qt,qt5,qt5.5,Qt,Qt5,Qt5.5,我有一个(非常简单的)QTreeView,其中显示了一些行: m_cameraModel = new QStandardItemModel(this); QSortFilterProxyModel* cameraProxyModel = new QSortFilterProxyModel(this); cameraProxyModel->setSourceModel(m_cameraModel); ui.CameraTreeView->setModel(cameraProxyMode

我有一个(非常简单的)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”,这样它仍然可见,但无法再被选择,并且以某种方式变灰,以便用户可以看到此条目未处于活动状态

也许这是一个初学者的问题,但如何做到这一点呢


谢谢

您可能希望使用
QItemDelegate
类,该类允许您禁用要删除的行以及其他内容。这里有一个关于StackOverflow的好问题,它展示了如何执行一个非常基本的示例:

您希望使用
QItemDelegate
类,该类允许您禁用要删除的行以及其他内容。这里有一个关于StackOverflow的好问题,它展示了如何做一个非常基本的示例:

我会尝试用以下方式来做:

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

我会尝试以下方法:

// 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
,该项将被禁用。您可能还希望使用QStandardItem::setForeground()和QStandardItem::setBackground()设置文本和/或背景色。需要的标志是
Qt::ItemIsEnabled
只要未设置该标志,该项将被禁用。