色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

嵌入式Qt-做一個秒表

碼農愛學習 ? 來源:碼農愛學習 ? 作者:碼農愛學習 ? 2022-09-08 08:52 ? 次閱讀

之前的文章:嵌入式Qt-動手編寫并運行自己的第1個ARM-Qt程序

介紹了如何編寫第一個嵌入式Qt程序,實現了一個電子時鐘的演示。

本篇,繼續進行Qt實踐,仿照手機中的秒表,實現一個相同功能的秒表:

pYYBAGMYocqAKF6_AACMff25EU8588.png

回顧上一次的Qt開發流程,整個Qt的開發都是通過敲代碼實現的,實際上,還可以利用Qt Creater的UI界面功能,通過圖像化的配置來開發圖形界面,本篇就使用這種方法來進行開發。

1 新建Qt工程

Qt工程創建的具體步驟可參照之前的文章:嵌入式Qt-動手編寫并運行自己的第1個ARM-Qt程序,這里只說明不同之處。

上篇是通過代碼實現頁面設計的,本篇要借助Qt Creater的UI界面設計功能,因此要把下面的創建頁面勾選上:

poYBAGMYodWAbbNBAAAVYQhj74w813.png

創建完成之后的Qt默認工程結構如下:

poYBAGMYodyAUYvJAABS9eJqAC0346.png

雙擊widget.ui,即可打開UI設置頁面,如下圖:

pYYBAGMYoeaAfmpPAABUaVyEGTA365.png

這里先簡單熟悉下各個功能區:

pYYBAGMYofGAakADAAC0mLFhv5w339.png

2 代碼編寫

2.1 ui界面設計

修改界面的尺寸,我的Linux板子屏幕的分辨率是800x480,因此調整到對應的尺寸:

poYBAGMYofiAJwD3AAAz6-wdrls642.png

從左側拖入一個Label,然后可以修改字體的大?。?/p> pYYBAGMYogCAVODwAACW9a1ezd8024.png

再從左側拖入其它需要用到的組件(PushButton、TextBrower)和位置調節組件(彈簧形狀的HorizontalSpacer、VericalSpacer

poYBAGMYogyAPaGeAABk7T4Yfq0386.png

進行水平布局和豎直布局,選中對應的組件,例如3個按鈕和中間的2個彈簧,點擊上方工具欄中的水平布局按鈕:

poYBAGMYohqAGAk_AAAhCartyJQ871.png

3個按鍵的水平布局效果如下:

poYBAGMYoiaAbDV9AAAcVO_PB5g439.png

然后再依次對其它組件進行布局:

pYYBAGMYojSAVEUSAAAby8VKkyE497.png

字體可以調整到居中顯示:

poYBAGMYojuAFOUBAABbnHn0QBM686.png

鼠標選中最大的組合組件,拖拽邊緣調整到合適的外尺寸。然后選中不同級別的組合組件,調整layoutStretch的參數,實現按比例顯示各個組件(相當于調節各個彈簧組件的彈力大?。?/p> poYBAGMYokSAGKhtAABRudWmlZk245.png

點擊左下角上面那個三角圖標,運行,查看效果:

pYYBAGMYolCADrYEAACSE98w9dQ094.png

注意左邊留的空白是給秒表的表盤留的。

2.2 QTimer與QTime介紹

QTimer 類為定時器提供了一個高級編程接口,提供重復和單次計時。

QTime 類提供時鐘時間功能,QTime 對象包含一個時鐘時間,它可以表示為自午夜以來的小時數、分鐘數、秒數和毫秒數。

Qt Creater提供了方便的幫助文檔,可以在Qt Creater中直接查看對應功能函數的使用,比如搜索QTimer,就可以看到對應的介紹,以及可用的API函數:

poYBAGMYolmAdZpYAACeGqEGDNY956.png

本篇需要用到QTimer的功能有:

start:啟動定時器

stop:停止定時器

再看看QTime的介紹:

pYYBAGMYomKAKUNsAAB2W98x1wc846.png

本篇需要用到QTime的功能有:

setHMS:設置初始時間

addMSecs:增加一個時間(毫秒單位)

toString:時間轉為字符串格式

minute:獲取分鐘

second:獲取秒

msec:獲取毫秒

2.3 對應按鈕的函數

為了編寫出更易看懂的代碼,在編寫代碼之前,需要修改對應的組件的默認名稱為便于理解的名稱,比如我將3個按鍵的名稱分別改為了:

Btn_Start:開始按鈕,并同時具有暫停/繼續功能

Btn_Reset:復位按鈕

Btn_Hit:打點按鈕,用于記錄不同名次的時間

poYBAGMYomyAB6lsAABeklD31BM999.png

然后還要手動添加QTimer和QTime對象,用于實現秒表的計時功能:

pYYBAGMYonWAPtfyAABfjRbQhi8570.png

2.3.1 開始按鈕的處理

Qt編程中重要處理就是信號和槽機制,它可用通過手動通過connet函數實現,而對于使用Qt Creater的圖形界面設計方式,通常也是繼續通過界面實現信號和和槽的連接:在開始按鈕上右鍵,選則“轉到槽...”:

poYBAGMYonyACVNCAAAsoHC1470473.png

然后有多種按鈕信號可以選擇,因為開始按鈕同時具有暫停/繼續的功能,這里使用toggled功能,利用按鈕的按下和松開狀態,來實現暫停/繼續的功能:

pYYBAGMYooeALfzVAAAr257QdaU300.png

點擊OK之后,會自動跳到到代碼頁面,并自動生成對應的槽函數框架,然后就可以在里面編譯對應的業務邏輯代碼了:

poYBAGMYopCAEGjqAAA-JkOJSOQ278.png

開始按鈕的具體業務邏輯代碼如下,當首次按下時,checked為true,此時啟動timer,記錄此時的時間戳,然后將按鈕的文字顯示為“暫?!保瑫r將復位和打點按鈕置灰,使這兩個按鈕不能再按下,因為暫停的時候執行復位和打點無意義。

timer每隔一段時間會觸發超時,這里ADD_TIME_MSEC設置的是30ms,超時時間到后,編寫對應的超時處理函數timeout_slot以及聲明對應的信號和槽的處理。

void Widget::on_Btn_Start_toggled(bool checked)
{
    if (checked)
    {
        timer.start(ADD_TIME_MSEC);
        lastTime = QTime::currentTime();//記錄時間戳
        ui->Btn_Start->setText("暫停");
        ui->Btn_Reset->setEnabled(false);
        ui->Btn_Hit->setEnabled(true);
    }
    else
    {
        timer.stop();
        ui->Btn_Start->setText("繼續");
        ui->Btn_Reset->setEnabled(true);
        ui->Btn_Hit->setEnabled(false);
    }
}

connect(&timer, SIGNAL(timeout()), this, SLOT(timeout_slot()));
void Widget::timeout_slot()
{
    //qDebug("hello");
    QTime nowTime = QTime::currentTime();
    time = time.addMSecs(lastTime.msecsTo(nowTime));
    lastTime = nowTime;
    ui->Txt_ShowTime->setText(time.toString("mm:ss.zzz"));
}

超時時間到了之后,計算一些兩次的時間差值,然后通過addMSecs函數來累加時間。

2.3.2 復位按鈕的處理

復位按鈕也是通過右鍵來調整到槽,注意這里使用clicked函數即可,因為復位按鈕只需要使用它的點擊按下功能:

poYBAGMYot-Add69AAAlgDZ8RpM426.png

對應的槽函數的具體實現如下:

void Widget::on_Btn_Reset_clicked()
{
    m_iHitCnt = 0;
    timer.stop();
    time.setHMS(0,0,0,0);
    ui->Txt_ShowTime->setText("00:00:00");
    ui->Txt_ShowItem->clear();

    ui->Btn_Start->setText("開始");
    ui->Btn_Start->setChecked(false);
    ui->Btn_Reset->setEnabled(false);
    ui->Btn_Hit->setEnabled(false);
}

主要是將時間歸零,將顯示情況,并將各個按鈕的顯示狀態復位為默認顯示狀態。

2.3.3 打點按鈕的處理

打點按鈕與復位按鈕一樣,也是只使用clicked函數即可,對應的槽函數的具體實現如下:

void Widget::on_Btn_Hit_clicked()
{
    QString temp;
    m_iHitCnt++;
    temp.sprintf("--計次 %d--", m_iHitCnt);
    ui->Txt_ShowItem->setFontPointSize(9);
    ui->Txt_ShowItem->append(temp);
    ui->Txt_ShowItem->setFontPointSize(12);
    ui->Txt_ShowItem->append(time.toString("[mm:ss.zzz]"));
}

打點功能用于在秒表的運行過程中,記錄不同名次的時間,并顯示在右側的文本顯示框中。

這里通過setFontPointSize函數來設置不同大小的字體顯示。

2.4 秒表表盤的實現

之前這篇文章:嵌入式Qt-動手編寫并運行自己的第1個ARM-Qt程序,通過代碼的方式,實現了一個時鐘表盤的顯示,本篇在這個的基礎上,修改代碼,實現一個顯示秒和分的秒表表盤,具體修改后的代碼如下:

connect(&timer, SIGNAL(timeout()), this, SLOT(update()));
connect(ui->Btn_Reset, SIGNAL(clicked()), this, SLOT(update()));

void Widget::paintEvent(QPaintEvent *event)
{
    int side = qMin(width(), height());
    //QTime time = QTime::currentTime();

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.translate(width()/3, height()*2/5); //畫圖的基準位置
    painter.scale(side/300.0, side/300.0); //隨窗口尺寸自動縮放

    //表盤(3個同心圓)
    for (int i=0; i;>

主要修改是將之前的小時顯示去掉,并改為兩個時間環:外圈秒環和內圈分環,秒環的范圍是0~60秒,分環的范圍是0~30分。

秒表表盤的顯示效果如下:

poYBAGMYowuAU9kWAABILtiglFg047.png

3 編譯運行

代碼是在Window環境中的Qt Creater中編寫的,首先是Windows中編譯查看效果。

3.1 Windows中編譯

在Windows中的運行效果如下圖的右圖,可以實現手機中秒表類似的計時效果:

pYYBAGMYocqAKF6_AACMff25EU8588.png

3.2 Ubuntu中編譯

將Windows中的QT工程源碼:

.cpp文件

.h文件

.pro文件

.ui文件

復制到Ubuntu中,注意.user文件是不需要的(它是Windows平臺的編譯配置)。

然后使用ARM平臺的編譯工具鏈,我的是在”/home/xxpcb/myTest/imx6ull/otherlib/qt/qt-everywhere-src-5.12.9/arm-qt/“,這里需要先用到它的qmake工具先自動生成Makefile文件,再通過make指令進行編譯。

使用qmake生成Makefile,進入程序源碼目錄,執行qmake指令:

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

成功執行之后,就可以看到自動生成的Makefile文件,然后執行make指令進行編譯得到可執行文件。

3.3 Linux板子中運行

將可執行文件放到已配置了qt運行環境的Linux板子中,運行并查看效果:

pYYBAGMYoyOAOmHkAAJGMqNBo-4004.png

注:

Ubuntu中的具體編譯過程,可參考之前這篇文章:嵌入式Qt-動手編寫并運行自己的第1個ARM-Qt程序

Ubuntu中Qt的交叉編譯環境的配置,可參考之前這篇文章:嵌入式Linux-Qt環境搭建

4 總結

本篇通過一個秒表的實例,介紹了如何使用Qt Creator的UI界面設計功能,進行Qt的開發,并將代碼進行交叉編譯,放入i.MX6ULL的Linux環境中測試運行情況。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5082

    文章

    19104

    瀏覽量

    304809
  • Qt
    Qt
    +關注

    關注

    1

    文章

    302

    瀏覽量

    37899
  • 秒表
    +關注

    關注

    3

    文章

    77

    瀏覽量

    22012
收藏 人收藏

    評論

    相關推薦

    嵌入式Qt-實現兩窗口的切換

    本篇介紹了介紹了QStackedWidget的使用,通過這個類,實現了Qt時鐘和Qt秒表這兩頁面可以隨意切換。
    的頭像 發表于 09-09 09:03 ?2706次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Qt-</b>實現兩<b class='flag-5'>個</b>窗口的切換

    嵌入式Qt-交叉編譯FFmpeg與視頻播放測試

    本篇介紹了嵌入式Qt播放視頻的準備工作:交叉編譯FFmpeg庫并移植到Linux板子中,并先通過ffmpeg指令測試視頻播放效果。下篇將嘗試設計Qt界面來結合FFmpeg進行視頻的播放。
    的頭像 發表于 09-15 02:08 ?2438次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Qt-</b>交叉編譯FFmpeg與視頻播放測試

    嵌入式Qt-表格使用測試

    本篇介紹了Qt中QTable Widget這個表格組件的使用,后續可增加SQLite數據庫功能,利用表格可以直觀的展示出嵌入式設備的數據庫中的數據信息。
    的頭像 發表于 05-14 12:27 ?1570次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Qt-</b>表格使用測試

    嵌入式QT的內核分析與優化

    本文給出了QT嵌入式版本(QT/E)與其它嵌入式GUI 工具箱在性能、結構上的比較,從宏觀上分析了QT/E 的優點及不足之處,對
    發表于 06-22 08:30 ?17次下載

    基于Qt嵌入式Linux通訊簿程序設計

      摘 要: 隨著嵌入式系統的發展,在Linux 下使用Qt 開發嵌入式應用程序是嵌入式圖形用戶界面( GUI) 系統應用研究的重點。通過
    發表于 11-23 11:31 ?3601次閱讀

    Qt嵌入式圖形開發(基礎篇)

    Qt嵌入式圖形開發(基礎篇)對Qt/embedded來說是很好的入門和提高教程
    發表于 12-16 17:14 ?51次下載

    嵌入式linux GUI-Qt解析

    職業培訓班》二期課程中嵌入式linux應用開發方面的重要內容。不少學員對QT方面的內容比較關注,所以在這里我們先對QT下簡單介紹。 QT
    發表于 11-01 16:53 ?1次下載

    基于嵌入式ARM的信號采樣及QT圖形顯示

    基于嵌入式ARM的信號采樣及QT圖形顯示(嵌入式開發技術圖解)-該文檔為基于嵌入式ARM的信號采樣及QT圖形顯示總結文檔,是
    發表于 08-04 10:28 ?9次下載
    基于<b class='flag-5'>嵌入式</b>ARM的信號采樣及<b class='flag-5'>QT</b>圖形顯示

    嵌入式LINUX的Qt開發入門教程

    嵌入式LINUX的Qt開發入門教程(最好的嵌入式開發板)-該文檔為嵌入式LINUX的Qt開發入門總結文檔,是
    發表于 08-04 11:01 ?30次下載
    <b class='flag-5'>嵌入式</b>LINUX的<b class='flag-5'>Qt</b>開發入門教程

    嵌入式linux安裝qt

    嵌入式linux部署qt幾個疑問在windows系統里編好的QT程序,經過交叉編譯后能直接運行在板子上嗎?還是板子需要弄個QT環境啥的?就是往里面安
    發表于 10-20 18:06 ?6次下載
    <b class='flag-5'>嵌入式</b>linux安裝<b class='flag-5'>qt</b>

    嵌入式Linux的Qt

    嵌入式Linux的Qt嵌入式Linux的Qt配置特定設備嵌入式Linux設備的平臺插件EGLFSLinuxFB輸入使用libinput鼠標M
    發表于 11-01 17:06 ?3次下載
    <b class='flag-5'>嵌入式</b>Linux的<b class='flag-5'>Qt</b>

    嵌入式Linux的QT版本,嵌入式Linux版本Qt5.4快速部署

    關鍵詞:摘要:Qt領先的跨平臺應用和UI 開發框架(Framework),使用標準C++,適用于桌面,嵌入式和移動平臺。本文著重就利用Boot to
    發表于 11-01 17:20 ?0次下載
    <b class='flag-5'>嵌入式</b>Linux的<b class='flag-5'>QT</b>版本,<b class='flag-5'>嵌入式</b>Linux版本<b class='flag-5'>Qt</b>5.4快速部署

    嵌入式Linux應用程序開發-(1)第一個嵌入式QT應用程序

    一個嵌入式QT應用程序在成功安裝 Qt Creator 開發環境后,我們通過簡單的
    發表于 11-01 17:21 ?16次下載
    <b class='flag-5'>嵌入式</b>Linux應用程序開發-(1)第<b class='flag-5'>一個</b><b class='flag-5'>嵌入式</b><b class='flag-5'>QT</b>應用程序

    嵌入式linux安裝qt,嵌入式Linux版本Qt5.4快速部署

    摘要:Qt領先的跨平臺應用和UI 開發框架(Framework),使用標準C++,適用于桌面,嵌入式和移動平臺。本文著重就利用Boot to
    發表于 11-02 10:51 ?0次下載
    <b class='flag-5'>嵌入式</b>linux安裝<b class='flag-5'>qt</b>,<b class='flag-5'>嵌入式</b>Linux版本<b class='flag-5'>Qt</b>5.4快速部署

    Qt 嵌入式圖形開發大全和QT開發手冊

    說,下面是基本簡介,還有他們的嵌入式技術交流群:787059199,有興趣的朋友可以加加,起交流,這個資料也能找到,QT手冊的沒有放出來,但是鏈接里面有,可以去看看下載鏈接:https://bbs....
    發表于 11-03 09:51 ?21次下載
    <b class='flag-5'>Qt</b> <b class='flag-5'>嵌入式</b>圖形開發大全和<b class='flag-5'>QT</b>開發手冊
    主站蜘蛛池模板: 久久热在线视频精品1| 国产成人在线观看网站| 国产精品色吧国产精品| 人人超碰97caoporen国产| 成人精品亚洲| 伊人角狠狠狠狠| 青青草原直播| 精品国产九九| 成人小视频在线免费观看| 亚洲精品高清AV在线播放| 蜜柚视频网在线观看免费| 不知火舞vs精子| 永久免费看bbb| 无套内射在线观看THEPORN| 久久久欧美国产精品人妻噜噜| 啊…嗯啊好深男男小黄文| 亚洲精品久久久午夜福利电影网 | 久久婷五月综合色啪首页| 成都电影免费中文高清| 影音先锋av电影| 手机在线观看你懂的| 嗯啊快停下我是你老师啊H| 国产性夜夜春夜夜爽1A片| zooskoo1videos人与狗| 一级黄色香蕉视频| 亚洲国产在线精品国偷产拍| 日韩影院久久| 欧美亚洲日韩欧洲不卡| 久久偷拍人| 老女老肥熟国产在线视频| 国产亚洲精品线观看不卡| 国产精品嫩草99AV在线| 风流少妇BBWBBW69视频| 俄罗斯XX性幻女18| 富婆大保健嗷嗷叫普通话对白| xxnx日本| 动漫美女的阴| 国产麻豆精品人妻无码A片| 父亲在线日本综艺免费观看全集| YELLOW视频在线观看免费版高清| 91亚洲精品|