Как определить, какая цветовая тема выбрана в ОС?

Как определить, какая цветовая тема выбрана в ОС (темная/светлая/кастомная)?

Хотел сделать возможность самостоятельного изменения цветовой темы в приложении за счет определения выбранной цветовой темы в ОС средствами Qt, но не могу понять как.


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

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

Получить основные цвета текущей схемы можно с использованием класса QPalette. QGuiApplication::palette создает палитру в соответствии с текущей схемой ОС, если только через аргументы командной строки не была выбрана другая схема, или не была установлена специальная схема или палитры, вызовами setPalette, setStyleSheet, setStyle.

Пример:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    
    QPalette basePalette;
    QColor baseColor =  basePalette.base().color();
    QColor newBase= QColor::fromRgbF( 1-baseColor.redF(), 1-baseColor.greenF(), 1-baseColor.blueF() );
    
    a.setPalette( QPalette( newBase ) );
    
    QMessageBox::information(nullptr,"test", "Test of base color invert...");
    
    return a.exec();
}
→ Ссылка