Изменить 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);
}
}
}