PyQt QTableView设置水平和垂直表头标签

17

使用QTableWidget,我可以做到

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

我该如何在QTableView中实现同样的功能?

2个回答

36

表格/树/列表小部件是基于项目的。表格/树/列表视图是基于视图/模型的(有时称为MVC,即模型/视图/控制器)。在模型/视图系统中,数据设置和操作在模型上进行,而视图只是显示它。要使用视图小部件,您还必须创建一个模型类。在许多情况下,人们会创建自己的模型类,并从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 系统的强大之处在于视图可以选择以任何方式显示来自模型的数据。如果您想创建自己的自定义视图,您可以完全控制每列中的文本如何对齐和显示。


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

4
Ruchit,在评论中表达感谢是可以的,但在 Stack Overflow 中,最好的感谢方式是通过点赞,并且仅当回答确实解决了问题时才接受它:http://stackoverflow.com/help/someone-answers - eric

1
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)

谢谢,这很有帮助。 - Tuhin Mitra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接