C++ QTableView行集合启用等效函数调用?

C++ QTableView行集合启用等效函数调用?,c++,qt,qtableview,C++,Qt,Qtableview,我要寻找的是能够“灰显”表中的一行,我使用设置了以下标志的QTableView: this->setSelectionMode(QAbstractItemView::ExtendedSelection); this->setSelectionBehavior(QAbstractItemView::SelectRows); QTableView是不可编辑的,但基本上与预期的一样,当单击一行时,它会以蓝色突出显示。我想添加一个关联菜单选项来灰显一行,而不是隐藏它。基本上,对于其他小部件

我要寻找的是能够“灰显”表中的一行,我使用设置了以下标志的
QTableView

this->setSelectionMode(QAbstractItemView::ExtendedSelection);
this->setSelectionBehavior(QAbstractItemView::SelectRows);

QTableView
是不可编辑的,但基本上与预期的一样,当单击一行时,它会以蓝色突出显示。我想添加一个关联菜单选项来灰显一行,而不是隐藏它。基本上,对于其他小部件,您可以调用
setEnabled(bool)
它只是让你可以看到小部件,而不是点击它或更改值等。我想知道
QTableView
中的一行是否有等价物,或者我是否需要对样式表等进行一些笨拙的黑客操作?

我假设你使用的是
qabstractablemodel

def data(self, index, role=Qt.DisplayRole):
        if role == Qt.BackgroundRole:
            # myItems is your data list for QAbstractTableModel
            # myObject.isDisabled is your decision flag 
            if self.myItems[index.row()].isDisabled is True: 
                return QVariant(Qt.gray)
        # other roles if needed (Display, align, foreground, etc.)

阅读完整文档->

单元格是否启用由
qabstractemmodel
flags
方法返回的
Qt::ItemIsEnabled
标志控制

默认情况下,这将返回
Qt::ItemIsEnabled | Qt::itemisselect
。只需在模型中重新实现
flags()
,省去
Qt::ItemIsEnabled

Qt::ItemFlags YourModel::flags(const QModelIndex& index) const
{
    Qt::ItemFlags f = Qt::ItemIsSelectable;
    if (rowIsEnabled(index.row())
        f |= Qt::ItemIsEnabled;
    return f;
}

请参阅文档:

如果您使用的是任何QAbstractTableModel(或其他),data(…)函数可用于此目的。您使用了吗?是的,我正在使用QTableModel,
data()
如何实现这一点?QTableModel不是标准的Qt类。您使用哪个类作为模型?@PavelStrakhov抱歉,我的意思是QAbstractTableModel感谢您的回答,这似乎确实有效,iv在我的QAbstractTableModel类中实现,现在禁用(变灰)单击行唯一的问题是,如果一行未启用,则即使仍设置了可选标志,我也无法再选择它,我假设未启用基本上会禁用所有功能。。。我希望能够选择“静止”,以便可以右键单击某行,根据所选内容再次启用该行rows@AngryDuck然后,您实际上不想禁用该行,而只是以不同的方式高亮显示它。像其他人建议的那样使用背景色。干杯,这就是我最终使用它的原因