如何对齐 QTableView 的列

Posted

技术标签:

【中文标题】如何对齐 QTableView 的列【英文标题】:How to align column of QTableView 【发布时间】:2016-07-01 16:32:27 【问题描述】:

我有这个代码:

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)

【讨论】:

效果很好。你能告诉我你在哪里找到描述 QtCore.Qt.DisplayRole 工作原理的文档吗? @nlgootee。请参阅:QAbstractItemModel.data 和 Qt.ItemDataRole。

以上是关于如何对齐 QTableView 的列的主要内容,如果未能解决你的问题,请参考以下文章

如何设置精度和对齐以在 QTableView 中显示数值

如何在pyqt4的右侧对齐qtableview行?

QTableView中单元格内容居中对齐

如何在 QTableView 的列中显示下拉列表并根据下拉列表进行过滤

Qt如何按比例分配QTableView的列宽并且充满整个控件

PyQt-QtableView 标头。如何添加右上角的小按钮以隐藏/显示带有选中/未选中复选框的列?