上篇文章介紹了如何搭建在Linux開發(fā)板中搭建Qt的運行環(huán)境,并測試了Qt自帶的例程。
本篇,來介紹如何自己編寫一個Qt程序,并將編譯結果放到Linux開發(fā)板中運行。
1 Windows上編寫Qt程序
因為Qt是支持跨平臺的,所以我們可以先在Windows平臺上編寫和查看Qt的運行效果,然后再通過交叉編譯,編譯出ARM Linux平臺的可執(zhí)行文件,最終放到開發(fā)板中查看運行結果。
Windows上需要安裝Qt Creator軟件來開發(fā)Qt程序,該軟件的安裝過程,和大多數(shù)軟件的安裝過程都差不多,在此不再演示安裝過程。
下面介紹如何創(chuàng)建一個Qt工程。
1.1 新建Qt工程
Qt Creator本質也是一個集成開發(fā)環(huán)境,與Visual Studio之類的創(chuàng)建工程的流程類似,其軟件界面如下:

創(chuàng)建工程,選擇左上角菜單中的“文件”->"新建文件或項目",彈出如下窗口,然后默認選擇Qt Widgets Application,然后右下加點擊“Choose"按鍵:

出現(xiàn)選擇項目工程的存放位置,然后再下一步:

這里會用到Visual Studio中的一些功能,默認即可,然后下一步:

然后要選擇類信息,基類里可選的有QMainWindow、QWidget和QDialog,這里我們選擇QWidget。
下面還有一個”創(chuàng)建界面“的勾選框,那個是用來通過圖形化的方式設計顯示界面,本篇暫用不到,先取消勾選,然后點下一步

到這里,Qt工程就創(chuàng)建好了,點完成:

創(chuàng)建的Qt工程如下,主要包含4個文件:
clock.pro:Qt工程的配置文件
main.cpp:主程序
widget.cpp:窗口程序
widget.h:窗口程序的頭文件

1.2 代碼編寫(時鐘程序)
Widget的構造函數(shù)
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);
setWindowTitle(tr("Clock"));
setMinimumSize(200, 200); //設置最小尺寸
}
首先創(chuàng)建了一個Qt的定時器,設置超時時間為1s(1000ms),超時時間到,更新表盤的顯示。
第2行是Qt中最常用的信號和槽機制:
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
信號和槽,簡單的立即,就是信號SIGNAL出現(xiàn)后(1s定時器超時),觸發(fā)槽SLOT函數(shù)執(zhí)行(更新表盤的顯示)
界面設計
時鐘程序中的表盤,表針等,都是通過畫圖的方式實現(xiàn)的,具體的代碼如下:
void Widget::paintEvent(QPaintEvent *event)
{
int side = qMin(width(), height());
QTime time = QTime::currentTime();
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.translate(width()/2, height()/2); //畫圖的基準位置
painter.scale(side/200.0, side/200.0); //隨窗口尺寸自動縮放
//表盤
for (int i=0; i;>
第2句:
QTime time = QTime::currentTime();
是來獲取系統(tǒng)的當前時間。
1.3 編譯運行
現(xiàn)在Windows平臺中編譯運行,查看效果:

該時鐘是可以根據(jù)窗口大小的變化,自動進行放到或縮小顯示的:

2 Ubuntu中交叉編譯Qt
Windows中測試通過后,就需要編譯出能夠在ARM平臺運行的可執(zhí)行程序了,這里需要在Ubuntu中進行編譯。
2.1 復制源文件到Ubuntu中
將Windows中的QT工程源碼,復制到Ubuntu中,注意.user文件是不需要的,這個是Windows平臺的編譯配置。

復制到Ubuntu中的合適位置:

2.2 交叉編譯
編譯ARM平臺的Qt程序,需要使用ARM平臺的編譯工具鏈。
上篇文章,在搭建Qt環(huán)境,編譯Qt源碼時,已經(jīng)生成了ARM平臺的Qt編譯工具鏈,其位置是在上篇文章介紹的make install那一步的安裝位置,我的是在”/home/xxpcb/myTest/imx6ull/otherlib/qt/qt-everywhere-src-5.12.9/arm-qt/“,這里需要先用到它的qmake工具先自動生成Makefile文件,再通過make指令進行編譯。
首先的使用qmake生成Makefile,進入程序源碼目錄,執(zhí)行qmake指令:
/home/xxpcb/myTest/imx6ull/otherlib/qt/qt-everywhere-src-5.12.9/arm-qt/bin/qmake
成功執(zhí)行之后,就可以看到自動生成的Makefile文件:

然后執(zhí)行make指令進行編譯:
make

編譯完可以看到可執(zhí)行文件clock。
我們可以再使用file命令查看該可執(zhí)行文件的平臺信息:
file clock

可以看到該可執(zhí)行文件是ARM平臺的。
3 Linux開發(fā)板中運行Qt程序
3.1 復制可執(zhí)行文件到開發(fā)板中
此次測試,仍然使用的是網(wǎng)絡位置掛載根文件系統(tǒng)的方式,通過如下指令將可執(zhí)行文件復制到根文件系統(tǒng)中(開發(fā)板中):
sudo cp clock ~/myTest/nfs/rootfs/myProj/qt/mytest/

3.2 查看開發(fā)板中的運行效果
然后就可以在開發(fā)板中執(zhí)行該程序,查看效果了:
./clock
運行效果如下:

由于板子的網(wǎng)絡時間還不能正確獲取,這里顯示的時間其實是不對的,不過表針仍然會1秒1秒的走動。
4 總結
本篇詳細介紹了如何自己編寫一個Qt程序,如何通過交叉編譯,最終放到開發(fā)板中執(zhí)行的過程。
-
ARM
+關注
關注
134文章
9353瀏覽量
377700 -
嵌入式
+關注
關注
5152文章
19676瀏覽量
317713 -
Linux
+關注
關注
87文章
11511瀏覽量
213872 -
開發(fā)板
+關注
關注
25文章
5683瀏覽量
104882 -
Qt
+關注
關注
2文章
314瀏覽量
39096
發(fā)布評論請先 登錄
高效開發(fā) | 瑞迅基于瑞芯微系列主板QT移植部署(上)

嵌入式軟件開發(fā)常用的軟件有哪些?
全志T536 4核A55 ARM+RISC-V+NPU 17路UART 工業(yè)開發(fā)板—Qt工程編譯說明

【技術案例】Qt 環(huán)境部署 - Ubuntu 篇

蜂鳥板上Openharmony系統(tǒng)跑QT程序
ElfBoard技術貼|如何在ELF 1開發(fā)板上交叉移植Qt

基于QT開發(fā)國產(chǎn)主板終端桌面程序 高效、穩(wěn)定、跨平臺的解決方案
【飛凌嵌入式OK3588J-C開發(fā)板體驗】OK3588J-C開發(fā)板的QT環(huán)境安裝
新手怎么學嵌入式?
國產(chǎn)Cortex-A55實驗箱操作案例分享:LED程序開發(fā)

評論