vs2010 qt 在linux运行程序,界面开发:如何使用交叉编译器在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。

abc4bb8d100bbd0a47ae03af8306edde.png

我们在目标设备上运行Qt Quick嵌入式应用程序

准备开发环境

开发主机将是Windows 10计算机。必须安装Visual Studio 2019,包括桌面开发和Linux开发工作负载。

format,png

所需的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安装可用。出于测试目的,这还将允许在开所发的应用程序上运行。

format,png

开发环境概述

交叉编译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:~$

设置Qt Visual Studio工具

要从IDE 安装Qt Visual Studio工具,请打开Extensions > Manage Extensions。搜索“ qt”:结果应显示“ Qt Visual Studio Tools”扩展名;选择它,然后按“下载”。关闭VS,然后按照安装说明进行操作。重新打开VS后,Qt Visual Studio工具应该可用。

format,png

Qt Visual Studio工具菜单

要使用Qt Visual Studio Tools,我们必须首先注册将要使用的Qt版本。我们将从为Windows注册Qt开始。

打开“Qt VS Tools > Qt Options”,然后在“ Qt版本”选项卡上按“Add”。

提供名称和Qt安装的路径。

format,png

在Qt VS工具中注册Windows版Qt

现在,我们将注册驻留在WSL实例中的Qt的交叉编译版本。

再次在“ Qt版本”选项卡上按“add”以打开“Add New Qt Version”对话框。

将“Build Host”设置为“ Linux WSL”。(如果我们使用的是物理构建主机,而不是通过WSL使用虚拟构建主机,则可以选择“ Linux SSH”。)

提供Qt安装的名称和路径,以及要使用的编译器(默认为g ++)。在这里,我们将提供交叉编译器的路径。

format,png

为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版本添加项目配置。

format,png

新项目配置

按“Finish”以完成项目创建向导。Visual Studio现在应该显示新的多平台Qt Quick项目。选择Windows配置,然后按F5键构建并运行该应用程序。然后应打开带有“ Hello World”标题的空窗口。

使用WSL在Visual Studio中交叉编译

使用WSL实例运行交叉编译器比使用SSH连接到构建主机更快。使用SSH时,MSBuild必须首先将源文件上传到远程主机。另一方面,WSL将在中安装本地驱动器/mnt,从而使文件访问瞬间完成。在这种情况下,MSBuild将Windows路径映射到根于的相应Linux路径/mnt,例如:

C:\include\foolibmaps to/mnt/c/include/foolib ✔️

MSBuild将假定属性页中提供的路径是本地路径,并将它们映射到/mnt。在属性页中使用绝对Linux路径时,这可能导致错误的映射,例如:

/home/user/raspimaps 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免费试用吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值