Отключить тему меню в 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 селектор.

Другие вопросы по тегам