PySide2 + QML: QApplication: недопустимое переопределение стиля прошло, игнорируя его - PullRequest
1 голос
/ 09 января 2020

Я создаю простое приложение, используя 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 Ответ

1 голос
/ 09 января 2020

Объяснение:

Аргумент "-style" используется для 2 целей:

  • Установить стиль виджетов Qt
  • Установить стиль Qt Быстрое управление.

Итак, поскольку QApplication предназначен для обработки виджетов Qt, попробуйте сначала проверить, существует ли стиль для виджетов Qt, но в вашем случае он не работает, выдав предупреждение, которое вы получаете, а затем попытайтесь установить sh стиль Qt Quick Controls.

Решение:

Таким образом, решение состоит в том, чтобы найти другую альтернативу, чтобы не было такой путаницы:

  1. Переменная среды: Задайте стиль с помощью переменной среды QT_QUICK_CONTROLS_STYLE:

    import os
    os.environ["QT_QUICK_CONTROLS_STYLE"] = "Universal"
    
  2. Файл конфигурации :

    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 скомпилируйте .qr c в .py, используя pyside2-rcc resource.qrc -o resource_rc.py или rcc --generator python resource.qrc -o resource_rc.py и

    2.4 import it int o ваше заявление.

    import resource_rc
    
...