设置默认QStyle

之前一直在做pyqt的开发,做出来一个界面之后,经常会发现在不同的国产操作系统上的显示有问题,比如UOS和麒麟V10系统上,经常会出现QTableWidget的行高不统一,或者是按钮样式不一致等等问题,之前一直是通过修改样式来解决,也一直没有深入思考。

直到今天再次出现QTableWidget的样式与开发环境不统一的问题,才意识到可能与系统的style设置有关,正好这次记录下此问题,以便自己加深记忆,并提供给阅读的人员以帮助。

系统style与Qstyle联系

qt本身有style模块用来设置整个应用程序的样式,同时也可以由用户来指定。大家看到不同的操作系统会呈现出不同的展示效果就是由系统的style控制的,当qt程序没有指定样式时,Qt会根据运行的桌面环境来选择合适的样式,因此就会出现在不同的界面上存在不同的展示样式的情形。

修改样式的方法

本次出现UI问题就是因为麒麟和UOS系统有自己的style,导致QTable的行间距不同出现的问题。

执行下列语句可以查看当前平台支持的QStyle的名称列表

from PySide2 import QtWidgets

print(QtWidgets.QStyleFactory.keys())

得出结果为:

['windowsvista', 'Windows', 'Fusion']

然后可以为程序设置固定的style,以实现不同界面有不同的展示效果,我这里设置为'windows'

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    # 固定默认的style为 Windows
    style = QtWidgets.QStyleFactory.create('Windows')
    app.setStyle(style)

    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_Form()
    ui.setupUi(MainWindow)
    MainWindow.show()

    sys.exit(app.exec_())

这样就可以统一不同平台的样式,要注意的是有的平台可能不存在"Windows"这个样式,就需要适配多适配几个,判断使用。当然,如果有时间也可以自定义样式来实现style的统一,不过这样比较麻烦就是了,qss和paintEvent完全可以实现目的

posted @   聚乙烯  阅读(187)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示