跨平台C++开发框架Qt教程:如何在Visual Studio中创建嵌入式Qt quick应用程序
Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用。而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式设备,Android(Necessitas)和iOS的端口上运行。现在我们为你提供了免费的试用版。赶快点击下载Qt最新试用版吧>>
Qt Visual Studio工具现在支持 Qt项目的交叉编译。由于Qt / MSBuild和Linux开发VS工作负载的集成,使其成为可能。在本文中,我们将展示如何使用此功能在Visual Studio中通过Qt Quick创建嵌入式应用程序。
我们将开发用于在镜像屏幕上显示公共信息的应用程序。这些是在休息区,洗手间等安装的一部分。该应用程序将在嵌入式Linux的设备上运行。在本文中,我们将使用运行Raspbian(Buster)的Raspberry Pi 3 ModelB。
我们在目标设备上运行Qt Quick嵌入式应用程序
准备开发环境开发主机将是Windows 10计算机。必须安装Visual Studio 2019,包括桌面开发和Linux开发工作负载。
所需的Visual Studio工作负载
我们将在Windows Linux子系统(WSL)的实例中运行交叉编译器。设置开发环境的下一步是启用WSL并安装Linux发行版。然后应该可以打开终端窗口并运行Linux命令。
user@buildhost:~$ uname -srvo Linux 4.4.0-18362-Microsoft #836-Microsoft Mon May 05 16:04:00 PST 2020 GNU/Linux user@buildhost:~$
WSL中的命令行外壳
要使用Qt Visual Studio工具,必须至少有一个Windows版Qt安装可用。出于测试目的,这还将允许在开所发的应用程序上运行。
开发环境概述
交叉编译Qt现在,我们可以继续设置交叉编译器。我们可以安装预构建的工具链,也可以编译自己的工具链。如果一切顺利,那么我们应该能够在设备上运行一个简单的程序。
user@buildhost:~$ echo "#include" > main.cpp user@buildhost:~$ echo "int main() {" >> main.cpp user@buildhost:~$ echo "std::cout << \"Hello World from Raspberry Pi\\n\";" >> main.cpp user@buildhost:~$ echo "return 0;" >> main.cpp user@buildhost:~$ echo "}" >> main.cpp user@buildhost:~$ /opt/cross-pi-gcc-8.3.0/bin/arm-linux-gnueabihf-g++ main.cpp user@buildhost:~$ scp a.out pi@192.168.1.99:/home/pi pi@192.168.1.99's password: a.out 100% 12KB 218.1KB/s 00:00 user@buildhost:~$ ssh pi@192.168.1.99 ./a.out pi@192.168.1.99's password: Hello World from Raspberry Pi user@buildhost:~$
在Raspberry Pi上运行“ Hello World”
我们准备为Raspberry Pi构建Qt。为此,我们将遵循“spberryPi2EGLFS — A modern guide for cross-compiling Qt for HW accelerated OpenGL with eglfs on Raspbian and setting up Qt Creator”教程。构建完成后,我们应该能够在Raspberry Pi上运行示例Qt应用程序。
user@buildhost:~$ echo "#include " > main.cpp user@buildhost:~$ echo "int main() {" >> main.cpp user@buildhost:~$ echo "qInfo() << \"Hello World with Qt version\" << qVersion();" >> main.cpp user@buildhost:~$ echo "return 0;" >> main.cpp user@buildhost:~$ echo "}" >> main.cpp user@buildhost:~$ echo "SOURCES += main.cpp" > hello.pro user@buildhost:~$ raspi/qt5/bin/qmake user@buildhost:~$ make -s user@buildhost:~$ scp hello pi@192.168.1.99:/home/pi pi@192.168.1.99's password: hello 100% 12KB 359.6KB/s 00:00 user@buildhost:~$ ssh pi@192.168.1.99 ./hello pi@192.168.1.99's password: Hello World with Qt version 5.12.9 user@buildhost:~$ user@buildhost:~$ echo "int main() {" >> main.cpp user@buildhost:~$ echo "qInfo() << \"Hello World with Qt version\" << qVersion();" >> main.cpp user@buildhost:~$ echo "return 0;" >> main.cpp user@buildhost:~$ echo "}" >> main.cpp user@buildhost:~$ echo "SOURCES += main.cpp" > hello.pro user@buildhost:~$ raspi/qt5/bin/qmake user@buildhost:~$ make -s user@buildhost:~$ scp hello pi@192.168.1.99:/home/pi pi@192.168.1.99's password: hello 100% 12KB 359.6KB/s 00:00 user@buildhost:~$ ssh pi@192.168.1.99 ./hello pi@192.168.1.99's password: Hello World with Qt version 5.12.9 user@buildhost:~$
在Raspberry Pi上运行Qt示例应用程序
设置Qt Visual Studio工具要从IDE 安装Qt Visual Studio工具,请打开Extensions > Manage Extensions。搜索“ qt”:结果应显示“ Qt Visual Studio Tools”扩展名;选择它,然后按“下载”。关闭VS,然后按照安装说明进行操作。重新打开VS后,Qt Visual Studio工具应该可用。
Qt Visual Studio工具菜单
要使用Qt Visual Studio Tools,我们必须首先注册将要使用的Qt版本。我们将从为Windows注册Qt开始。
- 打开“Qt VS Tools > Qt Options”,然后在“ Qt版本”选项卡上按“Add”。
- 提供名称和Qt安装的路径。
在Qt VS工具中注册Windows版Qt
现在,我们将注册驻留在WSL实例中的Qt的交叉编译版本。
- 再次在“ Qt版本”选项卡上按“add”以打开“Add New Qt Version”对话框。
- 将“Build Host”设置为“ Linux WSL”。(如果我们使用的是物理构建主机,而不是通过WSL使用虚拟构建主机,则可以选择“ Linux SSH”。)
- 提供Qt安装的名称和路径,以及要使用的编译器(默认为g ++)。在这里,我们将提供交叉编译器的路径。
为Raspberry Pi注册Qt版本
创建一个多平台的Qt Quick项目
在注册了将要使用的Qt版本之后,我们现在可以创建一个Qt项目。
- 选择“ File > New > Project”以打开“ Visual Studio”对话框以创建新项目
- 在项目模板搜索中输入“ qt”,然后选择“ Qt Quick Application”
- 按“Next”;提供项目的名称和位置,然后按“Create”。
- “Qt Quick Application Wizard”对话框将打开。按“Next >>”进行配置设置。
- 为Windows和Qt的Raspberry Pi版本添加项目配置。
新项目配置
按“Finish”以完成项目创建向导。Visual Studio现在应该显示新的多平台Qt Quick项目。选择Windows配置,然后按F5键构建并运行该应用程序。然后应打开带有“ Hello World”标题的空窗口。
使用WSL在Visual Studio中交叉编译使用WSL实例运行交叉编译器比使用SSH连接到构建主机更快。使用SSH时,MSBuild必须首先将源文件上传到远程主机。另一方面,WSL将在中安装本地驱动器/mnt,从而使文件访问瞬间完成。在这种情况下,MSBuild将Windows路径映射到根于的相应Linux路径/mnt,例如:
- C:\include\foolib maps to /mnt/c/include/foolib ??
MSBuild将假定属性页中提供的路径是本地路径,并将它们映射到/mnt。在属性页中使用绝对Linux路径时,这可能导致错误的映射,例如:
- /home/user/raspi maps to /mnt/home/user/raspi ?
为了避免这个问题,我们将在/mnt中创建指向WSL实例文件系统中其他顶层目录的符号链接。
user@buildhost:/mnt$ sudo ln -s /home home user@buildhost:/mnt$ ls -go total 0 drwxrwxrwx 1 4096 Sep 1 15:29 c drwxrwxrwx 1 4096 Sep 1 15:29 d drwxrwxrwx 1 4096 Sep 1 15:29 e lrwxrwxrwx 1 5 Sep 1 17:10 home -> /home user@buildhost:/mnt$
在中创建符号链接 /mnt
现在,我们可以交叉编译该项目了。选择一个Linux配置,然后按F7键开始构建。
1>------ Rebuild All started: Project: QuickMirror, Configuration: Release_RPi x64 ------ 1>Invoking 'mkdir -p $(dirname /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/qmake/temp/props.txt); mkdir -p /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/qmake/temp; cd /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/qmake/temp; ("/home/user/raspi/qt5/bin/qmake" -query) 1> props.txt', working directory: '/mnt/c/Users/user/Source/Repos/QuickMirror' 1>Reading Qt configuration (/home/user/raspi/qt5/bin/qmake) 1>Invoking 'mkdir -p $(dirname /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/qmake/temp/qtvars.pro); mkdir -p $(dirname /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/qmake/temp/Makefile); mkdir -p $(dirname /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/qmake/temp/qtvars.log); mkdir -p /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/qmake/temp; cd /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/qmake/temp; ("/home/user/raspi/qt5/bin/qmake" "CONFIG -= debug release debug_and_release" "CONFIG += release" qtvars.pro) 1> qtvars.log 2>&1', working directory: '/mnt/c/Users/user/Source/Repos/QuickMirror' 1>rcc qml.qrc 1>Invoking 'mkdir -p $(dirname qml.qrc); mkdir -p $(dirname /mnt/c/Users/user/Source/Repos/QuickMirror/main.qml); mkdir -p $(dirname /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/rcc/qrc_qml.cpp); (/home/user/raspi/qt5/bin/rcc /mnt/c/Users/user/Source/Repos/QuickMirror/qml.qrc --name qml -o /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/rcc/qrc_qml.cpp)', working directory: '/mnt/c/Users/user/Source/Repos/QuickMirror' 1>Starting remote build 1>Compiling sources: 1>main.cpp 1>qrc_qml.cpp 1>Linking objects 1>QuickMirror.vcxproj -> C:\Users\user\Source\Repos\QuickMirror\bin\x64\Release_RPi\QuickMirror.out 1>Done building project "QuickMirror.vcxproj". ========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
VS中的交叉编译Qt项目
接下来
总而言之,我们在Visual Studio中创建了一个多平台的Qt Quick项目,并使用交叉编译器为Raspberry Pi构建了该项目。在第2部分中,我们将研究:
- 部署和运行应用程序
- QML中的应用程序代码
- 在目标设备中调试
未完待续。。。。。。。
本篇文章中的内容你都学会了吗?如果这篇文章没能满足你的需求、点击获取更多文章教程!现在立刻下载Qt免费试用吧!更多Qt类开发工具QtitanRibbon、QtitanChart、QtitanNavigation、QtitanDocking、QtitanDataGrid在线订购现直降1000元,欢迎咨询慧都获取更多优惠>>