2016-07-01 4 views
0

У меня есть этот код:Как выровнять столбец QTableView

class 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 
     elif (index.column() == 3): 
      return QtCore.Qt.AlignHCenter  
     else: 
      return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable 

Когда я запускаю его я получаю сообщение об ошибке:

builtins.TypeError: invalid result from ManifestModel.flags(), AlignmentFlag cannot be converted to PyQt5.QtCore.ItemFlags in this context 

В той же процедуре, использующей ManifestModel, у меня есть код:

ui.label = QtWidgets.QLabel(ui.page) 
ui.label.setGeometry(QtCore.QRect(308, 0, 131, 20)) 
ui.label.setAlignment(QtCore.Qt.AlignCenter) 

Так что же мне нужно сделать, чтобы изменить выравнивание в столбце QTableView?

ответ

1

Эта процедура обрабатывается в модели data() модели. Поэтому попробуйте что-то вроде:

class ManifestModel(QtSql.QSqlTableModel): 

    def data(self, index, role=QtCore.Qt.DisplayRole): 
     if role == QtCore.Qt.TextAlignmentRole and index.column() == 3: 
      return QtCore.Qt.AlignHCenter 
     return super(ManifestModel, self).data(index, role) 
+0

Это работает отлично. Не могли бы вы рассказать мне, где вы нашли документацию, описывающую работу QtCore.Qt.DisplayRole? – nlgootee

+0

@nlgootee. См .: [QAbstractItemModel.data] (http://doc.qt.io/qt-5/qabstractitemmodel.html#data) и [Qt.ItemDataRole] (http://doc.qt.io/qt-5/qt .html # ItemDataRole-перечисление). – ekhumoro