跨平臺(tái)C++開(kāi)發(fā)框架Qt教程:如何在Visual Studio中創(chuàng)建嵌入式Qt quick應(yīng)用程序
Qt是一個(gè)跨平臺(tái)框架,通常用作圖形工具包,它不僅創(chuàng)建CLI應(yīng)用程序中非常有用。而且它也可以在三種主要的臺(tái)式機(jī)操作系統(tǒng)以及移動(dòng)操作系統(tǒng)(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設(shè)備,Android(Necessitas)和iOS的端口上運(yùn)行?,F(xiàn)在我們?yōu)槟闾峁┝嗣赓M(fèi)的試用版。趕快點(diǎn)擊下載Qt最新試用版吧>>
Qt Visual Studio工具現(xiàn)在支持 Qt項(xiàng)目的交叉編譯。由于Qt / MSBuild和Linux開(kāi)發(fā)VS工作負(fù)載的集成,使其成為可能。在本文中,我們將展示如何使用此功能在Visual Studio中通過(guò)Qt Quick創(chuàng)建嵌入式應(yīng)用程序。
我們將開(kāi)發(fā)用于在鏡像屏幕上顯示公共信息的應(yīng)用程序。這些是在休息區(qū),洗手間等安裝的一部分。該應(yīng)用程序?qū)⒃谇度胧絃inux的設(shè)備上運(yùn)行。在本文中,我們將使用運(yùn)行Raspbian(Buster)的Raspberry Pi 3 ModelB。
我們?cè)谀繕?biāo)設(shè)備上運(yùn)行Qt Quick嵌入式應(yīng)用程序
準(zhǔn)備開(kāi)發(fā)環(huán)境開(kāi)發(fā)主機(jī)將是Windows 10計(jì)算機(jī)。必須安裝Visual Studio 2019,包括桌面開(kāi)發(fā)和Linux開(kāi)發(fā)工作負(fù)載。
所需的Visual Studio工作負(fù)載
我們將在Windows Linux子系統(tǒng)(WSL)的實(shí)例中運(yùn)行交叉編譯器。設(shè)置開(kāi)發(fā)環(huán)境的下一步是啟用WSL并安裝Linux發(fā)行版。然后應(yīng)該可以打開(kāi)終端窗口并運(yùn)行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工具,必須至少有一個(gè)Windows版Qt安裝可用。出于測(cè)試目的,這還將允許在開(kāi)所發(fā)的應(yīng)用程序上運(yùn)行。
開(kāi)發(fā)環(huán)境概述
交叉編譯Qt現(xiàn)在,我們可以繼續(xù)設(shè)置交叉編譯器。我們可以安裝預(yù)構(gòu)建的工具鏈,也可以編譯自己的工具鏈。如果一切順利,那么我們應(yīng)該能夠在設(shè)備上運(yùn)行一個(gè)簡(jiǎn)單的程序。
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上運(yùn)行“ Hello World”
我們準(zhǔn)備為Raspberry Pi構(gòu)建Qt。為此,我們將遵循“spberryPi2EGLFS — A modern guide for cross-compiling Qt for HW accelerated OpenGL with eglfs on Raspbian and setting up Qt Creator”教程。構(gòu)建完成后,我們應(yīng)該能夠在Raspberry Pi上運(yùn)行示例Qt應(yīng)用程序。
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上運(yùn)行Qt示例應(yīng)用程序
設(shè)置Qt Visual Studio工具要從IDE 安裝Qt Visual Studio工具,請(qǐng)打開(kāi)Extensions > Manage Extensions。搜索“ qt”:結(jié)果應(yīng)顯示“ Qt Visual Studio Tools”擴(kuò)展名;選擇它,然后按“下載”。關(guān)閉VS,然后按照安裝說(shuō)明進(jìn)行操作。重新打開(kāi)VS后,Qt Visual Studio工具應(yīng)該可用。
Qt Visual Studio工具菜單
要使用Qt Visual Studio Tools,我們必須首先注冊(cè)將要使用的Qt版本。我們將從為Windows注冊(cè)Qt開(kāi)始。
- 打開(kāi)“Qt VS Tools > Qt Options”,然后在“ Qt版本”選項(xiàng)卡上按“Add”。
- 提供名稱(chēng)和Qt安裝的路徑。
在Qt VS工具中注冊(cè)Windows版Qt
現(xiàn)在,我們將注冊(cè)駐留在WSL實(shí)例中的Qt的交叉編譯版本。
- 再次在“ Qt版本”選項(xiàng)卡上按“add”以打開(kāi)“Add New Qt Version”對(duì)話框。
- 將“Build Host”設(shè)置為“ Linux WSL”。(如果我們使用的是物理構(gòu)建主機(jī),而不是通過(guò)WSL使用虛擬構(gòu)建主機(jī),則可以選擇“ Linux SSH”。)
- 提供Qt安裝的名稱(chēng)和路徑,以及要使用的編譯器(默認(rèn)為g ++)。在這里,我們將提供交叉編譯器的路徑。
為Raspberry Pi注冊(cè)Qt版本
創(chuàng)建一個(gè)多平臺(tái)的Qt Quick項(xiàng)目
在注冊(cè)了將要使用的Qt版本之后,我們現(xiàn)在可以創(chuàng)建一個(gè)Qt項(xiàng)目。
- 選擇“ File > New > Project”以打開(kāi)“ Visual Studio”對(duì)話框以創(chuàng)建新項(xiàng)目
- 在項(xiàng)目模板搜索中輸入“ qt”,然后選擇“ Qt Quick Application”
- 按“Next”;提供項(xiàng)目的名稱(chēng)和位置,然后按“Create”。
- “Qt Quick Application Wizard”對(duì)話框?qū)⒋蜷_(kāi)。按“Next >>”進(jìn)行配置設(shè)置。
- 為Windows和Qt的Raspberry Pi版本添加項(xiàng)目配置。
新項(xiàng)目配置
按“Finish”以完成項(xiàng)目創(chuàng)建向?qū)?。Visual Studio現(xiàn)在應(yīng)該顯示新的多平臺(tái)Qt Quick項(xiàng)目。選擇Windows配置,然后按F5鍵構(gòu)建并運(yùn)行該應(yīng)用程序。然后應(yīng)打開(kāi)帶有“ Hello World”標(biāo)題的空窗口。
使用WSL在Visual Studio中交叉編譯使用WSL實(shí)例運(yùn)行交叉編譯器比使用SSH連接到構(gòu)建主機(jī)更快。使用SSH時(shí),MSBuild必須首先將源文件上傳到遠(yuǎn)程主機(jī)。另一方面,WSL將在中安裝本地驅(qū)動(dòng)器/mnt,從而使文件訪問(wèn)瞬間完成。在這種情況下,MSBuild將Windows路徑映射到根于的相應(yīng)Linux路徑/mnt,例如:
- C:\include\foolib maps to /mnt/c/include/foolib ??
MSBuild將假定屬性頁(yè)中提供的路徑是本地路徑,并將它們映射到/mnt。在屬性頁(yè)中使用絕對(duì)Linux路徑時(shí),這可能導(dǎo)致錯(cuò)誤的映射,例如:
- /home/user/raspi maps to /mnt/home/user/raspi ?
為了避免這個(gè)問(wèn)題,我們將在/mnt中創(chuàng)建指向WSL實(shí)例文件系統(tǒng)中其他頂層目錄的符號(hào)鏈接。
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$
在中創(chuàng)建符號(hào)鏈接 /mnt
現(xiàn)在,我們可以交叉編譯該項(xiàng)目了。選擇一個(gè)Linux配置,然后按F7鍵開(kāi)始構(gòu)建。
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項(xiàng)目
接下來(lái)
總而言之,我們?cè)赩isual Studio中創(chuàng)建了一個(gè)多平臺(tái)的Qt Quick項(xiàng)目,并使用交叉編譯器為Raspberry Pi構(gòu)建了該項(xiàng)目。在第2部分中,我們將研究:
- 部署和運(yùn)行應(yīng)用程序
- QML中的應(yīng)用程序代碼
- 在目標(biāo)設(shè)備中調(diào)試
未完待續(xù)。。。。。。。
本篇文章中的內(nèi)容你都學(xué)會(huì)了嗎?如果這篇文章沒(méi)能滿足你的需求、點(diǎn)擊獲取更多文章教程!現(xiàn)在立刻下載Qt免費(fèi)試用吧!更多Qt類(lèi)開(kāi)發(fā)工具QtitanRibbon、QtitanChart、QtitanNavigation、QtitanDocking、QtitanDataGrid在線訂購(gòu)現(xiàn)直降1000元,歡迎咨詢慧都在線客服獲取更多優(yōu)惠>>