Заголовки платформы Qt
Некоторые приложения могут потребоваться для взаимодействия Qt с другими фреймворками. Это часто означает использование графических контекстов или других типов родных дескрипторов, созданных одним фреймворком с другим. Например, на некоторых платформах QOpenGLContext предоставляет возможность обернуть существующий родной контекст OpenGL, вместо создания нового. Этот существующий родной контекст может быть создан некоторым сторонним кодом.
Тип таких родных дескрипторов сильно зависит от платформы, и в некоторых случаях плагин платформы потребует больше информации для адаптации дескриптора, только сам дескриптор будет недостаточно. Поэтому общедоступный API состоит из функций, принимающих или возвращающих QVariant, содержащий тип значения, специфичный для платформы. См., например, QOpenGLContext::setNativeHandle() и QOpenGLContext::nativeHandle(). При работе на Linux/X11, используя плагин платформы xcb и интерфейс системы окон GLX, переменная содержит QGLXNativeContext. На других платформах будет использоваться другой класс. Все эти классы размещены в модуле заголовков платформы Qt.
Заголовки платформы могут использоваться совместно с QGuiApplication::platformFunction(), чтобы предоставить безопасный по типу интерфейс к специфичной для платформы функциональности. Возможно, что заголовки, определённые в QtPlatformHeaders, определяют определения типов для функций, которые могут быть возвращены плагином платформы из QGuiApplication::platformFunction(). Заголовки в QtPlatformHeaders также могут реализовывать функции-обёртки для указателя на функцию, предоставляя статическую функцию, которую можно вызывать из любого контекста после создания интеграции платформы. Пример такой реализации – QXcbWindowFunctions::setWmWindowType(). Эта функция получает указатель на функцию из QGuiApplication::platformFunction и выполняет эту функцию, если запрошенная функция была возвращена.
Примечание: Аналогично другим API QPA, для этих классов нет гарантий бинарной совместимости, что означает, что приложение, использующее эти классы, гарантированно будет работать только с версией Qt, с которой оно было разработано. В отличие от QPA, гарантируется совместимость исходного кода.
Начало работы
Для включения определений функций и классов модуля используйте следующие директивы:
#include <QtPlatformHeaders/QWindowsWindowFunctions> #include <QtPlatformHeaders/QXcbWindowFunctions>
Так как модуль является только заголовочным, дальнейших изменений в файлах .pro не требуется для его использования.
Примечание: Имя модуля (QtPlatformHeaders) должно появляться в директиве #include.
Примечание: Необязательно заключать код в #ifdef директивы в зависимости от платформы.
Справочник API
См. также QXcbWindowFunctions и QWindowsWindowFunctions.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qtplatformheaders-index.html