nlgootee
nlgootee

Reputation: 25

How to align column of QTableView

I have this code:

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

When I run it I get an error:

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

In the same routine that uses ManifestModel, I have the code:

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

So what do I have to do to change the alignment in a QTableView column?

Upvotes: 0

Views: 2541

Answers (1)

ekhumoro
ekhumoro

Reputation: 120798

The aligment is handled in the data() method of the model. So try something like:

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)

Upvotes: 4

Related Questions