Отключить тему меню в Qt?
Я унаследовал проект Qt, у которого были тематические меню правой кнопки мыши (которые выглядят очень странно в macOS). Я удалил вызов setStyleSheet() из QMenu, но он по-прежнему выделяет только текст вместо фона элемента и использует странные размеры шрифта.
Есть ли другое место в приложении Qt, где кто-то мог бы установить цвета, которые меню каким-то образом унаследует?
Меню отображается с помощью exec(), и QMenu и QActions создаются с QWidget в качестве их родителя, в случае, если это помогает.
2 ответа
Стили наследуются. На любом из виджетов, которые являются родителями отображаемого меню, может быть глобальная таблица стилей или таблица стилей. Вам нужно будет проверить их все и удалить стили меню.
Вы можете ограничить применимость стилей меню, используя динамическое свойство, чтобы описать, должен ли стиль применяться или нет:
QMenu[styled="true"] { ... }
Затем на платформах, где стилизованы меню, примените свойство:
void styleMenu(QMenu * menu) {
#ifndef Q_OS_MACOS
menu->setProperty("styled", true);
#endif
}
...
styleMenu(menu); // no-op on OS X
Вероятно, это было установлено глобально; искать вызов QApplication:: setStyleSheet, и для QMenu
селектор внутри этой глобальной таблицы стилей. Он также может быть установлен в таблицу стилей родительского виджета.
В общем, на вашем месте я бы запустил проект для таблиц стилей, содержащих QMenu
селектор.