我搜索了档案,发现了以下代码:
class ManifestModel: public QSqlTableModel
{
public:
ManifestModel(QObject * parent = 0, QSqlDatabase db = QSqlDatabase() ):
QSqlTableModel(parent, db)
{ }
~ManifestModel() { }
Qt::ItemFlags flags ( const QModelIndex & index ) const
{
if (index.column() == 2)
return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
else
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
};
然后使用ManifestModel代替QSqlTableModel。
这正是我需要做的,但我不了解C ++语法。有人可以请我把它转换成Python。我真的很感激。
答案 0 :(得分:1)
这应该有效,但我没有测试它:
from PyQt4.QtCore import Qt
from PyQt4.QtSql import QSqlTableModel, QSqlDatabase
class ManifestModel(QSqlTableModel):
def __init__(self, parent=None, db=QSqlDatabase()):
super(ManifestModel, self).__init__(parent, db)
def flags(self, index):
if (index.column() == 2):
return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsEditable
else:
return Qt.ItemIsEnabled | Qt.ItemIsSelectable
__init__
方法相当于C ++构造函数ManifestModel()
。 super
调用父构造函数,QSqlTableModel
。在继承子类时,你应该始终遵循这种模式。
方法~ManifestModel()
是一个析构函数,你通常不需要在python中担心它,没有必要定义一个方法。
flags
是一种类方法,即C ++语法
TypeOfOutput functionName( typeOfParameter1 parameter1){}
在python中有一个更简单的等价物:
functionName(self, parameter1):
最后,C ++ Qt::
变为Qt.
或QtCore.Qt.
,具体取决于导入。
答案 1 :(得分:1)
我知道这是一篇旧帖子,但由于我有点挣扎,这里是 QStandardItemModel
的扩展解决方案。可以选择将哪些列设置为只读,将它们的列表传递给 MyStandardItemModel.setReadOnly
class MyStandardItemModel(QStandardItemModel):
def __init__(self, parent=None, *arg, **kwargs):
super().__init__(parent, *arg, **kwargs)
self.__readonly_cols = []
def flags(self, index: QtCore.QModelIndex) -> QtCore.Qt.ItemFlags:
if (index.column() in self.__readonly_cols):
return QtCore.Qt.ItemIsEnabled
else:
return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable
def setReadOnly(self, columns: [int]):
for i in columns:
if i <= (self.columnCount() - 1) and i not in self.__readonly_cols:
self.__readonly_cols.append(i)
def resetReadOnly(self):
self.__readonly_cols = []
希望对大家有用
答案 2 :(得分:0)
这适用于PyQt5:
类ManifestModel(QtSql.QSqlTableModel):
def __init__(self, parent=None, db=QtSql.QSqlDatabase()):
super(ManifestModel, self).__init__(parent, db)
def flags(self, index):
if (index.column() == 4):
return QtCore.Qt.ItemIsEnabled
elif (index.column() == 6):
return QtCore.Qt.ItemIsEnabled
else:
return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable