PyQt QTableView Set Horizo​​ntal&垂直标题标签

时间:2016-05-14 03:10:11

标签: python pyqt

使用QTableWidget我可以做到

table = QTableWidget()
table.setHorizontalHeaderLabels(QString("Name;Age;Sex;Add").split(";"))
table.horizontalHeaderItem().setTextAlignment(Qt.AlignHCenter)

我怎么能用QTableView做什么?

2 个答案:

答案 0 :(得分:21)

表/树/列表小组件是基于项目的。表/树/列表视图是基于视图/模型的(有时称为MV​​C,用于模型/视图/控制器)。在模型/视图系统中,数据在模型上设置和操作,视图只显示它。要使用View小部件,还必须创建一个模型类。在许多情况下,人们会从QAbstractItemModel创建自己的子类,但是你不必这样做。 Qt提供了一个非抽象模型,可以与所有视图类一起使用 - QStandardItemModel

model = QStandardItemModel()
model.setHorizontalHeaderLabels(['Name', 'Age', 'Sex', 'Add'])
table = QTableView()
table.setModel(model)

有几种方法可以做对齐。模型中实际支持对齐数据,但标题视图允许您设置默认值(如果对齐数据未在模型中设置,我猜测它会使用它)

header = table.horizontalHeader()
header.setDefaultAlignment(Qt.AlignHCenter)

要获得更多控制,您可以直接在模型上设置对齐数据。

# Sets different alignment data just on the first column
model.setHeaderData(0, Qt.Horizontal, Qt.AlignJustify, Qt.TextAlignmentRole)

但View / Model系统的强大之处在于视图可以选择从模型任何方式显示该数据。如果您想创建自己的自定义视图,则可以绝对控制每列中文本的对齐和显示方式。

答案 1 :(得分:0)

self.tableWidget = QTableView()
projectModel = QSqlQueryModel()
projectModel.setQuery("SELECT * FROM historyDetails where 1")
# projectView = QTableView()
projectModel.setHeaderData(1, Qt.Horizontal, 'Date')
projectModel.setHeaderData(2, Qt.Horizontal, 'Alarm')
self.tableWidget.setModel(projectModel)
self.tableWidget.setColumnHidden(0, True)
# Table will fit the screen horizontally
self.tableWidget.horizontalHeader().setStretchLastSection(True)
self.tableWidget.horizontalHeader().setSectionResizeMode(
    QHeaderView.Stretch)