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.pyrcc --generator python resource.qrc -o resource_rc.py

    将.qrc 编译为.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:通过了无效的样式覆盖,忽略它的主要内容,如果未能解决你的问题,请参考以下文章

关于 QML 和 PySide2 的几个问题

PySide2 + QML:QApplication:通过了无效的样式覆盖,忽略它

将 QML 信号连接到 PySide2 插槽

是否可以通过 QML 从 PySide2 插槽(服务调用)获取对象列表?

使用 PySide2 将 python 信号连接到 QML ui 插槽

Pyside2:使用属性更新 QML TableView 模型