设置默认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完全可以实现目的