PyQt4 qTableView 对齐方式

3 投票
1 回答
2239 浏览
提问于 2025-04-18 04:02

希望有人能帮我一下 - 我花了几天时间搜索,但一直没有找到解决办法...

我在使用PyQt,并且有几个qTableView来显示一些数据 - 现在我想把这些数据居中对齐。

我的代码在下面 - ui_manual_matching.table_unmatched_flights是qTableView对象。

非常感谢!

亚当

    db = QSqlDatabase.addDatabase("QSQLITE")
    db.setDatabaseName(settings.str_combined_database)
    db.open()
    #CREATE AN SQL STRING TO FILTER BY (I wont bore you with the details)
    flights_table_model = QSqlTableModel()
    flights_table_model.setTable('eg_table')
    flights_table_model.setFilter(str_eg_filter)
    flights_table_model.select()

    ui_manual_matching.table_unmatched_flights.setModel(flights_table_model)

'

1 个回答

2

你可以通过创建一个新的类来继承 QSqlTableModel,并重写 data() 方法来实现这个功能。大概可以这样做:

class MySqlModel(QSqlTableModel):
    def data(self, index, role=Qt.DisplayRole):
        if role == Qt.TextAlignmentRole:
            return Qt.AlignCenter
        return QSqlTableModel.data(self,index,role)

这样做会保留你现在的 QSqlTableModel 的行为,唯一的不同是当视图请求文本对齐方式时,你的模型会返回你想要的对齐方式。当然,你可以通过使用其他的标志来选择对齐方式(查看Qt文档),甚至可以添加更多的逻辑,根据传入 data() 方法的模型索引来设置不同的对齐方式。

附注:别忘了在你的代码中实例化这个新的模型,而不是你现在使用的那个。所以把 flights_table_model = QSqlTableModel() 替换成 flights_table_model = MySqlModel()

撰写回答