PySide2 + QML:QApplication:通过了无效的样式覆盖,忽略它
Posted
技术标签:
【中文标题】PySide2 + QML:QApplication:通过了无效的样式覆盖,忽略它【英文标题】:PySide2 + QML : QApplication: invalid style override passed, ignoring it 【发布时间】:2020-01-08 22:30:54 【问题描述】:我正在使用 QML + PySide / Python 作为后端构建一个简单的应用程序。
我正在尝试使用“通用”qml 样式。我正在继承 QApplication 并添加 -style Universal
参数:
class MyApp(QApplication):
def __init__(self, args):
qt_args = [args[0], '-style', 'Universal'] + args[1:]
super(MyApp, self).__init__(qt_args)
它可以工作(我的应用使用通用风格)但它会引发以下警告:
QApplication: invalid style override passed, ignoring it.
Available styles: windowsvista, Windows, Fusion
PySide2 似乎无法获得标准的 QML 样式(通用/材质)
有人知道怎么处理吗?
谢谢。
【问题讨论】:
【参考方案1】:说明:
“-style”参数有两个用途:
设置 Qt 小部件的样式 设置 Qt Quick Controls 的样式。因此,由于 QApplication 旨在处理 Qt 小部件,因此首先尝试验证 Qt 小部件的样式是否存在,但在您的情况下,它会通过发出您收到的警告而失败,然后尝试建立 Qt 快速控件的样式.
解决方案:
所以解决方案是找到另一种替代方案来避免这种混乱:
Environment variable:通过QT_QUICK_CONTROLS_STYLE环境变量设置样式:
import os
os.environ["QT_QUICK_CONTROLS_STYLE"] = "Universal"
Configuration file:
2.1 创建文件“qtquickcontrols2.conf”,内容如下
; This file can be edited to change the style of the application
; See Styling Qt Quick Controls 2 in the documentation for details:
; http://doc.qt.io/qt-5/qtquickcontrols2-styles.html
[Controls]
Style=Material
2.2 将其添加到一个 qresource,
<RCC>
<qresource prefix="/">
<file>qtquickcontrols2.conf</file>
</qresource>
</RCC>
2.3 使用pyside2-rcc resource.qrc -o resource_rc.py
或rcc --generator python resource.qrc -o resource_rc.py
和
2.4 将其导入您的应用程序。
import resource_rc
【讨论】:
感谢您的详细解答!第一个解决方案仍然是创建警告:WARNING:root:WARNING: Cannot find style "Universal" - fallback: "path/to/PySide2/qml/QtQuick/Controls/Styles/Desktop"
。使用配置文件效果很好。以上是关于PySide2 + QML:QApplication:通过了无效的样式覆盖,忽略它的主要内容,如果未能解决你的问题,请参考以下文章
PySide2 + QML:QApplication:通过了无效的样式覆盖,忽略它
是否可以通过 QML 从 PySide2 插槽(服务调用)获取对象列表?