V
Nov. 13, 2019, 12:49 a.m.

Стиль для QtQuick

Добрый день.

Есть ли другие способы установить стиль для QtQuick из PyQt5, кроме как либо прописывать в системной переменной или передать в качестве системного аргумента в таком виде:

sys_argv = sys.argv
sys_argv += ['--style', 'material']
app = QGuiApplication(sys_argv)
2

Do you like it? Share on social networks!

5
Evgenii Legotckoi
  • Nov. 13, 2019, 2:13 p.m.

Добрый день.

Думаю, что да. Выбранный стиль можно подгружать при запуске программы. Во всяком случае, есть такой пример на C++ - Controls Gallery . И там есть такой код

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QSettings>
#include <QQuickStyle>
#include <QIcon>

int main(int argc, char *argv[])
{
    QGuiApplication::setApplicationName("Gallery");
    QGuiApplication::setOrganizationName("QtProject");
    QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    QIcon::setThemeName("gallery");

    QSettings settings;
    QString style = QQuickStyle::name();
    if (!style.isEmpty())
        settings.setValue("style", style);
    else
        QQuickStyle::setStyle(settings.value("style").toString());

    QQmlApplicationEngine engine;
    engine.rootContext()->setContextProperty("availableStyles", QQuickStyle::availableStyles());
    engine.load(QUrl("qrc:/gallery.qml"));
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}

Полагаю, что для Qt Quick должны быть привязки вот к этому

QQuickStyle::setStyle(settings.value("style").toString());

Возможно, что это будет выглядеть на Python как-то так

QQuickStyle.setStyle("material")

Но я не уверен, нужно проверять.

    V
    • Nov. 14, 2019, 10:10 p.m.

    Добрый день.

    Ну да, с С++ так можно :-) Но у PyQt5 нет аналога QQuickStyle.
    В любом случае, вариант с установкой стиля через sys_argv работает, так что пусть так и остаётся.

    Спасибо.

      Evgenii Legotckoi
      • Nov. 15, 2019, 2:23 p.m.
      • (edited)

      Я нашёл решение от разработчиков PyQt5 в списке рассылки.

      os.environ['QT_QUICK_CONTROLS_STYLE'] = 'Material'

      Попробуйте его ещё

        V
        • Nov. 15, 2019, 5:03 p.m.

        Да, я про такой способ знаю :-) В своём вопросе я его и имел в виду, когда упомянул "либо прописывать в системной переменной".

        Для моего приложения он не подходит, т.к. это не бекенд, а стэндэлаун-приложение и я не хочу привязываться к системному окружению клиента.

        Спасибо за идеи.

          Evgenii Legotckoi
          • Nov. 15, 2019, 5:06 p.m.

          Ну тогда не знаю )) Я большую часть времени на C++ с Qt работаю, а PyQt5 у меня боком. Так что, чем можем помочь ))

            Comments

            Only authorized users can post comments.
            Please, Log in or Sign up
            • Last comments
            • Evgenii Legotckoi
              March 9, 2025, 9:02 p.m.
              К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
            • VP
              March 9, 2025, 4:14 p.m.
              Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
            • ИМ
              Nov. 22, 2024, 9:51 p.m.
              Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
            • Evgenii Legotckoi
              Oct. 31, 2024, 11:37 p.m.
              Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
            • A
              Oct. 19, 2024, 5:19 p.m.
              Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html