Qt для WinRT
Qt для WinRT позволяет запускать приложения Qt на устройствах, поддерживающих API приложений Магазина Windows. Это включает приложения с современным интерфейсом в Windows 8.1 и более поздних версиях, а также устройствах, работающих под управлением Windows RT 8.1 и Windows Phone 8.1 и более поздних версий.
Microsoft представила новую парадигму дизайна с современным интерфейсом Windows 8. Основной частью этого нового подхода является Windows Runtime (WinRT), который поддерживает разработку с использованием различных языков программирования, таких как C++/CX (расширения компонентов), C#, VB.NET или JavaScript. Порт Qt использует возможности C++. Хотя WinRT поддерживает расширения компонентов внутри, они не используются внутри Qt, и вам не нужно их использовать. Приложения WinRT выполняются в защищенной среде по соображениям безопасности и поддерживают различные архитектуры, такие как ARM и x86.
Требования
Разработка для Windows Runtime требует хоста разработки Microsoft Windows. Минимальная поддерживаемая версия — Windows 8.1.
В зависимости от целевого устройства вам понадобятся следующие инструменты, предоставляемые Microsoft:
| Целевое устройство | Среда |
|---|---|
| Современный интерфейс Windows 8.1 | Visual Studio 2013 для Windows |
| Windows RT | Visual Studio 2013 для Windows |
| Windows Phone 8.1 | Visual Studio 2013 для Windows Phone |
| Windows 10 | Visual Studio 2015 |
Если вы нацеливаетесь на удаленное устройство, следуйте всем инструкциям Visual Studio для правильной настройки.
Если вы нацеливаетесь на эмулятор Windows Phone, для запуска самого эмулятора требуется Microsoft Windows 8.1 Pro.
Начало работы
Примечания для пользователей настольных компьютеров
Поскольку приложения WinRT выполняются в защищенной среде, при разработке кроссплатформенных приложений или переносе приложений с других платформ следует учитывать некоторые ограничения:
- Класс QProcess не реализован (указано определением макроса
QT_NO_PROCESS), так как запуск дочерних процессов невозможен. - Некоторые пути, возвращаемые QStandardPaths::writableLocation(), могут быть пустыми.
- Приложение WinRT не может осуществлять обмен данными по сокетам с другим приложением, выполняющимся на том же хосте (это нарушало бы защищенную среду).
- Приложения выполняются только в полноэкранном режиме (см. QStyleHints). На настольном компьютере размер экрана изменяется при изменении размера приложения.
- Переменные среды отсутствуют. Qt эмулирует функциональность, сохраняя значения локально, поэтому qputenv() и связанные функции продолжают работать. Все известные переменные, влияющие на Qt, можно задать в исходном коде.
- Приложения WinRT по своей природе являются приложениями с графическим интерфейсом. Это означает, что приложения типа консоли будут иметь созданное внутри окно, которое всегда будет видимым.
- Приложения не должны выходить из программы программно. В частности, вызов exit() до отображения графического интерфейса приводит к ошибке.
- Буфер обмена WinRT локален для приложения; он не может быть получен приложением на настольном компьютере.
Создание приложений
Вы можете разрабатывать приложения для WinRT так же, как и другие приложения Qt. Используйте ваш любимый редактор или IDE (например, Qt Creator) и создайте ваше приложение или загрузите пример Qt. Затем запустите qmake и nmake/jom для сборки приложения.
Создание приложений с помощью Visual Studio
Для запуска проекта с помощью Visual Studio необходимо создать соответствующий проект. qmake поддерживает преобразование проекта .pro в формат Visual Studio, передавая параметры -tp vc.
qmake -tp vc <your project>.pro
Обратите внимание на правильное соответствие qmake и Visual Studio. Поскольку формат Visual Studio является универсальным, он не возвращает мгновенную ошибку, если, например, вы откроете проект Windows Phone в Visual Studio для Windows.
Это создает проект, который поддерживает сборку приложений и их запуск с помощью Visual Studio. Он не встраивает библиотеки Qt в пакет и требует от вас их добавления вручную. Для этого в установленный пакет включен инструмент командной строки windeployqt. Для включения автоматического анализа зависимостей и добавления библиотек и зависимостей в пакет приложения создайте проект со следующими параметрами:
qmake -tp vc <your project>.pro "CONFIG+=windeployqt"
Создание приложений с помощью Qt Creator
Вам не нужно производить преобразование, чтобы открыть ваш проект в Qt Creator. Следуйте общим инструкциям о том, как открыть и собрать проект.
Qt Creator развертывает ваше приложение на устройстве WinRT, если устройство обнаружено компьютером.
Примечание: Удаленные компьютеры, такие как Surface, пока не поддерживаются для развертывания с помощью Creator.
Создание из исходного кода
Предполагается, что вы клонировали репозитории Qt 5 (или получили исходные коды Qt другим способом) и выполнили платформенно-независимые требования для сборки Qt. Процесс сборки Qt описан на странице Сборка исходных кодов Qt.
Qt для WinRT всегда собирается как кросс-сборка, потому что такие инструменты, как qmake, собираются как приложения для настольных компьютеров. Для их компиляции требуется среда разработки для настольных компьютеров. Если вы установили Visual Studio 2013 для Windows, это создаст только двоичные файлы для WinRT. Вам также потребуется Visual Studio для настольных компьютеров Windows, чтобы создать эти инструменты для настольных компьютеров.
Убедитесь, что вы используете командную строку x86 (либо используйте VS x86 Native Tools Command Prompt, либо вызовите vcvarsall.bat без параметров или с x86) для каждой сборки WinRT/Windows Phone. Хотя среда разработки, используемая для целевого устройства, устанавливается автоматически, командная строка определяет, что будет использоваться для инструментов хоста, таких как qmake или moc. Сборка этих инструментов может завершиться ошибкой, если используется другая командная строка.
Формат mkspec WinRT имеет вид <platform>-<architecture>-<toolchain> где platform может быть winrt или winphone а архитектура может быть arm, x86, или x64. Ниже приведен пример сборки qtbase для WinRT:
> ./configure -xplatform winrt-x64-msvc2013 -release > nmake/jom
Запуск приложений из командной строки
Приложения WinRT должны быть упакованы (включая все зависимости) и установлены или зарегистрированы в службе приложений, чтобы их можно было запустить. Инструмент WinRT Runner можно использовать для запуска этих приложений из командной строки.
Содержимое пакета
Содержимое пакета состоит из исполняемого файла приложения и его зависимостей, как и для любого приложения Windows. Зависимости — это необходимые (Qt) библиотеки и плагины. Обратите внимание, что плагины Qt должны быть помещены в папку, названную в соответствии с их категорией (платформы, форматы изображений и т. д.) без использования папки plugins в качестве корня. Дополнительную информацию см. в разделе Qt для Windows — Развертывание.
Поскольку приложения WinRT выполняются в защищенной среде, установка пути для указания необходимых файлов не сработает.
Утилита windeployqt определяет зависимости приложения и копирует библиотеки и плагины Qt в соответствующие каталоги по мере необходимости.
Поскольку все ресурсы размещаются в одном каталоге, вы можете зарегистрировать каталог с помощью XML-файла (AppxManifest.xml) и Windows PowerShell. Справочник по этим файлам манифеста см. здесь. Необходимо указать архитектуру целевого процессора (в отличие от значения по умолчанию «нейтральная»). Как только эти требования будут выполнены, перейдите в папку packaged в PowerShell и выполните:
> Add-AppxPackage -Register AppxManifest.xml
Примечание: Инструмент WinRT Runner может выполнить ту же операцию с параметром --install.
Если все прошло успешно, вы должны найти свое приложение на начальном экране Windows 8.1. Чтобы удалить приложение, используйте встроенный способ удаления приложений Windows (щелкните правой кнопкой мыши или удерживайте палец на приложении и выберите Uninstall).
Примечание: Инструмент WinRT Runner может выполнить ту же операцию с параметром --remove.
Инструмент WinRT Runner
Инструмент WinRT Runner находится в QTDIR/bin/winrtrunner. Он предназначен для помощи в развертывании, запуске и отладке приложений Qt для WinRT. Его можно использовать из командной строки или вызывать из IDE.
Usage: winrtrunner.exe [options] package [arguments]
winrtrunner installs, runs, and collects test results for packages made with Qt.
Options:
--test Installs, starts, collects output, stops (if
needed), and uninstalls the package. This is
the default action of winrtrunner.
--start Starts the package. The package is installed
if it is not already installed. Pass
--install to force reinstallation.
--debug <debugger> Starts the package with the debugger
attached. The package is installed if it is
not already installed. Pass --install to
force reinstallation.
--debugger-arguments <arguments> Sets the arguments to be passed to the
debugger when --debug is used. If no
debugger was provided, this option is ignored.
--suspend Suspends a running package. When combined
with --stop or --test, the app will be
suspended before being terminated.
--stop Terminates a running package. Can be be
combined with --start and --suspend.
--wait <seconds> If the package is running, waits the given
number of seconds before continuing to the
next task. Passing 0 causes the runner to
wait indefinitely.
--install (Re)installs the package.
--remove Uninstalls the package.
--device <name|index> Specifies the device to target as a device
name or index. Use --list-devices to find
available devices. The default device is the
first device found for the active run
profile.
--profile <name> Forces a particular run profile.
--list-devices Lists the available devices (for use with
--device).
--verbose <level> Sets the verbosity level of the message output
(0 - silent, 1 - info, 2 - debug). Defaults
to 1.
--ignore-errors Always exits with code 0, regardless of the
error state.
-?, -h, --help Displays this help.
Arguments:
package [arguments] The executable or package manifest to act
upon. Arguments after the package name will
be passed to the application when it starts.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/winrt-support.html