0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式Qt-動(dòng)手編寫并運(yùn)行自己的第1個(gè)ARM-Qt程序

碼農(nóng)愛(ài)學(xué)習(xí) ? 來(lái)源:碼農(nóng)愛(ài)學(xué)習(xí) ? 作者:碼農(nóng)愛(ài)學(xué)習(xí) ? 2022-06-02 09:06 ? 次閱讀

上篇文章介紹了如何搭建在Linux開發(fā)板中搭建Qt的運(yùn)行環(huán)境,并測(cè)試了Qt自帶的例程。

本篇,來(lái)介紹如何自己編寫一個(gè)Qt程序,并將編譯結(jié)果放到Linux開發(fā)板中運(yùn)行。

1 Windows上編寫Qt程序

因?yàn)镼t是支持跨平臺(tái)的,所以我們可以先在Windows平臺(tái)上編寫和查看Qt的運(yùn)行效果,然后再通過(guò)交叉編譯,編譯出ARM Linux平臺(tái)的可執(zhí)行文件,最終放到開發(fā)板中查看運(yùn)行結(jié)果。

Windows上需要安裝Qt Creator軟件來(lái)開發(fā)Qt程序,該軟件的安裝過(guò)程,和大多數(shù)軟件的安裝過(guò)程都差不多,在此不再演示安裝過(guò)程。

下面介紹如何創(chuàng)建一個(gè)Qt工程。

1.1 新建Qt工程

Qt Creator本質(zhì)也是一個(gè)集成開發(fā)環(huán)境,與Visual Studio之類的創(chuàng)建工程的流程類似,其軟件界面如下:

poYBAGKXfviACv21AAEijaCVbAg618.png

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

pYYBAGKXfv6ACFgOAABV9vt-L84049.png

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

poYBAGKXfwaAejQwAAAkwzfLE7s296.png

這里會(huì)用到Visual Studio中的一些功能,默認(rèn)即可,然后下一步:

pYYBAGKXfwyAXFQ0AAAkcLkzY5E226.png

然后要選擇類信息,基類里可選的有QMainWindow、QWidget和QDialog,這里我們選擇QWidget。

下面還有一個(gè)”創(chuàng)建界面“的勾選框,那個(gè)是用來(lái)通過(guò)圖形化的方式設(shè)計(jì)顯示界面,本篇暫用不到,先取消勾選,然后點(diǎn)下一步

poYBAGKXfxOALLBTAAA02acWN-A919.png

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

poYBAGKXfxiARD60AAAmzaE7fls127.png

創(chuàng)建的Qt工程如下,主要包含4個(gè)文件:

clock.pro:Qt工程的配置文件

main.cpp:主程序

widget.cpp:窗口程序

widget.h:窗口程序的頭文件

pYYBAGKXfx2AA02ZAAD1xORuFww084.png

1.2 代碼編寫(時(shí)鐘程序)

Widget的構(gòu)造函數(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); //設(shè)置最小尺寸
}

首先創(chuàng)建了一個(gè)Qt的定時(shí)器,設(shè)置超時(shí)時(shí)間為1s(1000ms),超時(shí)時(shí)間到,更新表盤的顯示。

第2行是Qt中最常用的信號(hào)和槽機(jī)制:

connect(timer, SIGNAL(timeout()), this, SLOT(update()));

信號(hào)和槽,簡(jiǎn)單的立即,就是信號(hào)SIGNAL出現(xiàn)后(1s定時(shí)器超時(shí)),觸發(fā)槽SLOT函數(shù)執(zhí)行(更新表盤的顯示)

界面設(shè)計(jì)

時(shí)鐘程序中的表盤,表針等,都是通過(guò)畫圖的方式實(shí)現(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); //畫圖的基準(zhǔn)位置
    painter.scale(side/200.0, side/200.0); //隨窗口尺寸自動(dòng)縮放

    //表盤
    for (int i=0; i;>

第2句:

QTime time = QTime::currentTime();

是來(lái)獲取系統(tǒng)的當(dāng)前時(shí)間。

1.3 編譯運(yùn)行

現(xiàn)在Windows平臺(tái)中編譯運(yùn)行,查看效果:

pYYBAGKXfyaAWkg1AAHFzNAdmQs888.png

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

pYYBAGKXfyuACZ49AABJoS-M_wo902.png

2 Ubuntu中交叉編譯Qt

Windows中測(cè)試通過(guò)后,就需要編譯出能夠在ARM平臺(tái)運(yùn)行的可執(zhí)行程序了,這里需要在Ubuntu中進(jìn)行編譯。

2.1 復(fù)制源文件到Ubuntu中

將Windows中的QT工程源碼,復(fù)制到Ubuntu中,注意.user文件是不需要的,這個(gè)是Windows平臺(tái)的編譯配置。

poYBAGKXfzGAbDjRAABQvuWe9qk049.png

復(fù)制到Ubuntu中的合適位置:

pYYBAGKXfziAX0eTAAAzxIo-gRY421.png

2.2 交叉編譯

編譯ARM平臺(tái)的Qt程序,需要使用ARM平臺(tái)的編譯工具鏈。

上篇文章,在搭建Qt環(huán)境,編譯Qt源碼時(shí),已經(jīng)生成了ARM平臺(tái)的Qt編譯工具鏈,其位置是在上篇文章介紹的make install那一步的安裝位置,我的是在”/home/xxpcb/myTest/imx6ull/otherlib/qt/qt-everywhere-src-5.12.9/arm-qt/“,這里需要先用到它的qmake工具先自動(dòng)生成Makefile文件,再通過(guò)make指令進(jìn)行編譯。

首先的使用qmake生成Makefile,進(jìn)入程序源碼目錄,執(zhí)行qmake指令:

/home/xxpcb/myTest/imx6ull/otherlib/qt/qt-everywhere-src-5.12.9/arm-qt/bin/qmake

成功執(zhí)行之后,就可以看到自動(dòng)生成的Makefile文件:

pYYBAGKXfz-AHhnJAACvLQXs1SM877.png

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

make
poYBAGKXf0aAUiwlAAHXhcKuUfU908.png

編譯完可以看到可執(zhí)行文件clock。

我們可以再使用file命令查看該可執(zhí)行文件的平臺(tái)信息:

file clock
poYBAGKXf02AalYqAAHj4jcziv8433.png

可以看到該可執(zhí)行文件是ARM平臺(tái)的。

3 Linux開發(fā)板中運(yùn)行Qt程序

3.1 復(fù)制可執(zhí)行文件到開發(fā)板中

此次測(cè)試,仍然使用的是網(wǎng)絡(luò)位置掛載根文件系統(tǒng)的方式,通過(guò)如下指令將可執(zhí)行文件復(fù)制到根文件系統(tǒng)中(開發(fā)板中):

sudo cp clock ~/myTest/nfs/rootfs/myProj/qt/mytest/
pYYBAGKXf1WALW_FAAHLQaP6e1U234.png

3.2 查看開發(fā)板中的運(yùn)行效果

然后就可以在開發(fā)板中執(zhí)行該程序,查看效果了:

./clock

運(yùn)行效果如下:

pYYBAGKXf1uAOfwrAAJK_7y7SJc130.png

由于板子的網(wǎng)絡(luò)時(shí)間還不能正確獲取,這里顯示的時(shí)間其實(shí)是不對(duì)的,不過(guò)表針仍然會(huì)1秒1秒的走動(dòng)。

4 總結(jié)

本篇詳細(xì)介紹了如何自己編寫一個(gè)Qt程序,如何通過(guò)交叉編譯,最終放到開發(fā)板中執(zhí)行的過(guò)程。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    8967

    瀏覽量

    365070
  • 嵌入式
    +關(guān)注

    關(guān)注

    5046

    文章

    18821

    瀏覽量

    298655
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11125

    瀏覽量

    207928
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4771

    瀏覽量

    96195
  • Qt
    Qt
    +關(guān)注

    關(guān)注

    1

    文章

    300

    瀏覽量

    37606
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式開發(fā)常用軟件有哪些?

    的擴(kuò)展程序商店安裝擴(kuò)展以拓展軟件功能。 2.Visual Studio 簡(jiǎn)稱VS: 它是一個(gè)IDE,集成開發(fā)環(huán)境。驗(yàn)證C程序或是進(jìn)行c#程序開發(fā),可以用它。一些與
    發(fā)表于 09-09 15:22

    七大嵌入式GUI盤點(diǎn)

    MiniGUI-Standalone三種運(yùn)行模式運(yùn)行。它對(duì)中文的支持很友好,支持GB2312與BIG5字符集,其他字符集也可以輕松加入。 Qt for MCU 是一個(gè)專為
    發(fā)表于 09-02 10:58

    嵌入式QT常見(jiàn)開發(fā)方式有哪些?

    嵌入式QT常見(jiàn)開發(fā)方式有哪些? 嵌入式工程師在學(xué)習(xí)和使用Qt進(jìn)行開發(fā)時(shí),常見(jiàn)的幾種開發(fā)方式包括: 1.Qt Widgets編程: 通過(guò)C
    發(fā)表于 08-12 10:05

    【飛凌嵌入式OK527N-C開發(fā)板體驗(yàn)】4. mpp與播放器+ubuntusdk qt環(huán)境搭建

    就好,畢竟是開發(fā)嵌入式環(huán)境 配置QT時(shí)發(fā)現(xiàn)與手冊(cè) 有區(qū)別,選項(xiàng)都 不同,不太明白 原因 最后發(fā)現(xiàn)是自己加配置時(shí)選 成了QCC 配置的時(shí)候 注意這里要選擇新建的編譯器配置 新建 hello world
    發(fā)表于 07-27 14:59

    嵌入式系統(tǒng)中集成Rust和Qt的實(shí)踐

    Rust 擁有豐富的庫(kù)生態(tài)系統(tǒng),用于序列化和反序列化、異步操作、解析不安全輸入、線程、靜態(tài)分析等,而 Qt 是一個(gè) C++ 工具包,支持跨各種平臺(tái)的豐富的、基于 GUI 的應(yīng)用程序,從 iOS 到
    發(fā)表于 05-03 10:26 ?1356次閱讀
    在<b class='flag-5'>嵌入式</b>系統(tǒng)中集成Rust和<b class='flag-5'>Qt</b>的實(shí)踐

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-在ELF 1開發(fā)環(huán)境中使用QT Creator進(jìn)行遠(yuǎn)程調(diào)試

    Qt Creator是一個(gè)跨平臺(tái)的集成開發(fā)環(huán)境(IDE),主要用于開發(fā)基于Qt框架的應(yīng)用程序。它提供了強(qiáng)大的遠(yuǎn)程調(diào)試功能,開發(fā)人員可以在自己
    發(fā)表于 04-30 09:45

    飛凌嵌入式ElfBoard ELF 1板卡-在ELF 1開發(fā)環(huán)境中使用QT Creator進(jìn)行遠(yuǎn)程調(diào)試

    Qt Creator是一個(gè)跨平臺(tái)的集成開發(fā)環(huán)境(IDE),主要用于開發(fā)基于Qt框架的應(yīng)用程序。它提供了強(qiáng)大的遠(yuǎn)程調(diào)試功能,開發(fā)人員可以在自己
    發(fā)表于 04-30 09:35

    Qt上位機(jī)開發(fā)實(shí)戰(zhàn)案例

    Qt Creator是一個(gè)用于Qt開發(fā)的輕量級(jí)跨平臺(tái)集成開發(fā)環(huán)境。 Qt Creator可帶來(lái)兩大關(guān)鍵益處: 提供首個(gè)專為支持跨平臺(tái)開發(fā)而設(shè)計(jì)的集成開發(fā)環(huán)境 (IDE),
    的頭像 發(fā)表于 03-13 12:31 ?1788次閱讀
    <b class='flag-5'>Qt</b>上位機(jī)開發(fā)實(shí)戰(zhàn)案例

    3562-Qt工程編譯說(shuō)明

    Qt 環(huán)境、交叉編譯 工具鏈等。當(dāng)用戶使用 Qt Creator 工具和 X86 端 Qt 環(huán)境編寫編譯
    的頭像 發(fā)表于 03-05 09:19 ?334次閱讀
    3562-<b class='flag-5'>Qt</b>工程編譯說(shuō)明

    如何用RK3588編寫應(yīng)用程序

    由于筆者平時(shí)的嵌入式開發(fā)工作,主要是集中在嵌入式Linux和Qt應(yīng)用開發(fā)方向,因此,本篇文章我們嘗試參考飛凌官方提供的嵌入式Linux+Qt
    發(fā)表于 12-19 13:24

    嵌入式學(xué)習(xí)——ElfBoard ELF1板卡 編譯運(yùn)行qt應(yīng)用的方法

    :~# chmod 777 audio (3)設(shè)置QT環(huán)境變量 root@ELF1:~# export DISPLAY=:0.0 (4)運(yùn)行audio應(yīng)用程序 root@ELF
    發(fā)表于 11-15 11:04

    基于嵌入式Linux與QT的汽車虛擬儀表設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于嵌入式Linux與QT的汽車虛擬儀表設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-26 14:38 ?0次下載
    基于<b class='flag-5'>嵌入式</b>Linux與<b class='flag-5'>QT</b>的汽車虛擬儀表設(shè)計(jì)

    基于QT-E的嵌入式Linux系統(tǒng)的軟鍵盤實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《基于QT-E的嵌入式Linux系統(tǒng)的軟鍵盤實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 10-24 10:42 ?0次下載
    基于<b class='flag-5'>QT</b>-E的<b class='flag-5'>嵌入式</b>Linux系統(tǒng)的軟鍵盤實(shí)現(xiàn)

    基于嵌入式QT的數(shù)字機(jī)頂盒圖形界面設(shè)計(jì)與實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《基于嵌入式QT的數(shù)字機(jī)頂盒圖形界面設(shè)計(jì)與實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 10-18 10:51 ?0次下載
    基于<b class='flag-5'>嵌入式</b><b class='flag-5'>QT</b>的數(shù)字機(jī)頂盒圖形界面設(shè)計(jì)與實(shí)現(xiàn)

    基于Qt嵌入式交通信號(hào)機(jī)GUI設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于Qt嵌入式交通信號(hào)機(jī)GUI設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-13 10:14 ?1次下載
    基于<b class='flag-5'>Qt</b>的<b class='flag-5'>嵌入式</b>交通信號(hào)機(jī)GUI設(shè)計(jì)