QTableView行setEnabled等效函数调用?

时间:2014-07-18 13:03:49

标签: c++ qt qtableview

我正在寻找的是“灰色”"在表格中的一行,我使用QTableView并设置了以下标志:

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

QTableView是不可编辑的,但基本上按照预期,当点击一行时,它会突出显示为蓝色。我想添加一个上下文菜单选项来灰显一行而不是隐藏它。基本上使用其他小部件,您可以调用setEnabled(bool),它只是使它可以看到小部件,但不是点击它或更改值等。我想知道是否有一个等效的单行QTableView或者我将不得不在样式表等方面做一些尴尬的讨厌?

2 个答案:

答案 0 :(得分:1)

我假设你正在使用QAbstractTableModel

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.)

阅读完整文档 - > QtDoc.QAbstractTableModel

答案 1 :(得分:1)

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

默认情况下,返回Qt::ItemIsEnabled | Qt::ItemIsSelectable。只需在模型中重新实现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;
}

请参阅文档:http://qt-project.org/doc/qt-5/qabstractitemmodel.html#flags