Когда определяется QT_NO_CONTEXTMENU? - PullRequest
1 голос
/ 10 февраля 2020

В документации Qt по меню они показывают, как переопределить контекстное меню для виджета. Они используют макрос QT_NO_CONTEXTMENU, но не делают никаких комментариев в тексте об этом макросе, почему он там и кто его использует:

#ifndef QT_NO_CONTEXTMENU
    void contextMenuEvent(QContextMenuEvent *event) override;
#endif // QT_NO_CONTEXTMENU

Когда QT_NO_CONTEXTMENU определяется Qt?

Я мог видеть, как Qt определяет этот макрос для вас в системах, которые, например, не поддерживают контекстные меню. Поскольку объявление QAbstractScrollArea s contextMenuEvent заключено таким же образом, я знаю, что для обеспечения безопасности необходимо также использовать макрос, иначе я рискну использовать override для несуществующей функции, которая никогда не будет вызвана. Но я хочу знать, что привело бы к тому, что этот макрос был определен в первую очередь, поскольку мне кажется очень странным, что это был бы макрос во-первых, а не переменная-член QAbstractScrollArea, которую можно установить в в любое время.

1 Ответ

2 голосов
/ 10 февраля 2020

Этот макрос определяется, когда установлена ​​опция -no-feature-CONTEXTMENU при настройке и сборке Qt из источника, т. Е. С использованием инструмента configure. Вы правы, что это для систем, которые не поддерживают контекстные меню. Обычно это встраиваемые системы (например, сенсорный киоск), которые имеют ограниченные ресурсы, поэтому вы не хотите перегружать их дополнительными модулями, особенно теми, которые в любом случае не будут использоваться.

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