Qt получить таблицы стилей по умолчанию для разных ОС - PullRequest
0 голосов
/ 06 марта 2020

Я разрабатываю кроссплатформенное приложение, и в Windows оно выглядит намного хуже, чем в Ubuntu. Это относится только к таблице стилей по умолчанию для Windows против таблицы стилей для Ubuntu. Есть ли способ получить OS-зависимую таблицу стилей, которая применяется к приложению? Я попытался получить таблицу стилей приложения с помощью:

QApplication app(argc, argv);
qDebug() << "Style sheet: " << app.styleSheet();

Но это приводит к пустой строке (если вы не установили ее вручную). Мое намерение состоит в том, чтобы получить таблицу стилей Ubuntu и сохранить ее в файл (и добавить ее в список ресурсов), чтобы затем я мог загрузить ее для приложения в обеих ОС:

QApplication app(argc, argv);
QFile file(":/ubuntu_style.qss");
file.open(QFile::ReadOnly);
QString styleSheet = QLatin1String(file.readAll());
app.setStyleSheet(styleSheet);

Любые идеи по как получить таблицу стилей по умолчанию для ОС?

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Я нашел ответ в другом форуме . Я публикую его здесь для будущего поиска других пользователей.

Вы можете получить стили по умолчанию для ОС, используя QStyleFactory. Список возможных стилей доступен с помощью QStyleFactory::key() возвращает список доступных ключей. В моем случае это всегда возвращало "Windows" и "Fusion" в ОС Windows и Linux. Более того, в Windows у меня также есть "windowsvista". Используя этот класс, я могу установить основной стиль приложения с помощью:

QApplication app(argc, argv);
app.setStyle(QStyleFactory::create("Fusion"));

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

Однако, это не обеспечивает таблицу стилей, она предоставляет QStyle, поэтому использование app.styleSheet(); возвращает пустую строку. Прочитав другой переполнение стека вопрос и особенно комментарии к принятому ответу , можно лучше понять таблицы стилей QStyle и qt. И заключите, что невозможно преобразовать QStyle в таблицу стилей, так как эти вещи работают на разных слоях. (особая благодарность за комментарий, опубликованный там @ lcikgl )

0 голосов
/ 06 марта 2020

Согласно документации , stylesheet() вернет пустую строку (что соответствует вашему случаю), если вы не укажете правильный путь, используя аргумент -stylesheet. Я думаю, что вы этого не делаете. Итак, вам нужно добавить этот аргумент для вашего приложения. Или создайте свой собственный файл qss и добавьте его в папку ресурсов. Я надеюсь, что это поможет вам решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...