Qt для WinRT
Qt для WinRT позволяет запускать приложения Qt на устройствах, поддерживающих API приложений Магазина Windows. Это охватывает приложения с современным интерфейсом на Windows 10, Windows 10 Mobile и Windows 10 IoT.
Microsoft представил новую парадигму проектирования с современным интерфейсом Windows 8. Важной частью этого нового подхода является Windows Runtime (WinRT), который поддерживает разработку с использованием различных языков программирования, таких как C++/CX (расширения компонентов), C#, VB.NET или JavaScript. Порт Qt использует возможности C++. Хотя WinRT поддерживает расширения компонентов внутри, они не используются внутри Qt, и вам не нужно их использовать. Приложения WinRT выполняются в защищенной среде по соображениям безопасности и поддерживают различные архитектуры, такие как ARM и x86.
Требования
Разработка для Windows Runtime требует хост-среды разработки Microsoft Windows. Минимальная поддерживаемая версия — Windows 10.
В зависимости от целевого устройства вам понадобятся следующие инструменты, предоставляемые Microsoft:
| Целевое устройство | Среда |
|---|---|
| Windows 10 Mobile | Visual Studio 2015 |
| Windows 10 Desktop | Visual Studio 2015 |
| Windows 10 IoT | Visual Studio 2015 |
| XBox One | Visual Studio 2015 |
Если вы нацелены на удаленное устройство, следуйте всем инструкциям Visual Studio для его правильной настройки.
Начало работы
Примечания для пользователей настольных компьютеров
Так как приложения 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. Хотя среда, используемая для целевого устройства, устанавливается автоматически, командная строка определяет, что будет использоваться для инструментов хоста, таких как qmake или moc. Сборка этих инструментов может завершиться неудачей, если используется другая командная строка.
Формат mkspec WinRT — <platform>-<architecture>-<toolchain>, где архитектура может быть arm, x86, или x64. Ниже приведен пример сборки qtbase для WinRT:
> ./configure -xplatform winrt-x64-msvc2013 -release > nmake/jom
Запуск приложений из командной строки
Приложения WinRT должны быть упакованы (включая все зависимости) и установлены или зарегистрированы в службе приложений для запуска. Для запуска этих приложений из командной строки можно использовать инструмент WinRT Runner Tool.
Содержимое пакета
Содержимое пакета состоит из исполняемого файла приложения и его зависимостей, как и для любого приложения Windows. Зависимости — это необходимые (библиотеки Qt) и плагины. Обратите внимание, что плагины Qt должны быть помещены в папку, названную в соответствии с их категорией (платформы, форматы изображений и т. д.), не используя корневую папку plugins. Более подробную информацию см. в разделе Qt для Windows — Развертывание.
Так как приложения WinRT выполняются в защищенной среде, установка переменной пути для указания необходимых файлов не сработает.
Удобный инструмент windeployqt ищет зависимости приложения и копирует библиотеки и плагины Qt в соответствующие каталоги по мере необходимости.
Поскольку все ресурсы размещаются в одном каталоге, вы можете зарегистрировать каталог с помощью XML-файла (AppxManifest.xml) и Windows PowerShell. Справочник по этим файлам манифеста можно найти здесь. Целевая архитектура процессора должна быть указана (в отличие от значения по умолчанию «нейтральный»). Как только эти требования выполнены, перейдите в PowerShell в каталог packaged и выполните:
> Add-AppxPackage -Register AppxManifest.xml
Примечание: WinRT Runner Tool может выполнить то же действие с опцией --install.
Если всё прошло успешно, вы должны увидеть своё приложение на начальном экране Windows. Чтобы удалить приложение, используйте встроенный в Windows способ удаления приложений (щелкните правой кнопкой мыши или коснитесь и удерживайте приложение, и выберите Uninstall).
Примечание: WinRT Runner Tool может выполнить то же действие с опцией --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.11/winrt-support.html