Изменить QStyle для QWidget

Как изменить стиль отдельного виджета, не затрагивая глобальный стиль?

Есть класс, отнаследованный от QProxyStyle, в котором определяется цветовая панель. При присваивании его отдельному виджета изменений не происходит, однако при изменении глобально через qApp->setStyle стили меняются.

Версия Qt: 5.15.2

#include "dialog.hpp"

#include <QApplication>

#include <style/dark_style.hpp>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Dialog w;

    w.show();

    ICustomStyle * style = new DarkStyle;

    w.setStyle( style );

    style->polish( &w );


    // Работает, но меняет глобально
    // qApp->setStyle( style );

    return a.exec();
}

Ответы (1 шт):

Автор решения: needKVAS

Полагаю, проблема в том, что стиль применяется только к основному виджету, но не к дочерним, когда QApplication применяет стиль ко всем виджетам приложения.

Предлагаю проставить стиль рекурсивно, например так:

void setStyle(QWidget *w, QStyle* style) {
    w->setStyle(style);
    for (QObject* obj : w->children()) {
        if (QWidget* child = qobject_cast<QWidget*>(obj)) {
            setStyle(child, style);
        }
    }
}
→ Ссылка