В документации Qt по меню они показывают, как переопределить контекстное меню для виджета. Они используют макрос QT_NO_CONTEXTMENU
, но они не делают никаких комментариев в тексте об этом макросе, почему он там и кто его использует:
#ifndef QT_NO_CONTEXTMENU
void contextMenuEvent(QContextMenuEvent *event) override;
#endif // QT_NO_CONTEXTMENU
Когда QT_NO_CONTEXTMENU определяется Qt?
Я видел Qt, определяющий этот макрос для вас, например, в системах, которые не поддерживают контекстные меню. Поскольку объявление QAbstractScrollArea
для contextMenuEvent
заключено в один и тот же способ, я знаю, что для обеспечения безопасности необходимо также использовать макрос, в противном случае я рискну использовать override
для несуществующей функции, которая никогда не будет вызвана. Но я хочу знать, что привело бы к тому, что этот макрос был определен в первую очередь, поскольку мне кажется очень странным, что это был бы макрос во-первых, а не переменная-член QAbstractScrollArea
которую можно установить в любое время ,
Всего 1 ответ
Этот макрос определяется, когда опция -no-feature-CONTEXTMENU
установлена при конфигурировании и сборке Qt из источника, т.е. с configure
инструмента configure
. Вы правы, что это для систем, которые не поддерживают контекстные меню. Обычно это встраиваемые системы (например, сенсорный киоск), которые имеют ограниченные ресурсы, поэтому вы не хотите связывать их какими-либо дополнительными модулями, особенно теми, которые в любом случае не будут использоваться.