日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]隨著嵌入式技術的不斷發(fā)展,嵌入式系統(tǒng)在各種領域中得到了廣泛的應用。本文針對嵌入式系統(tǒng)需要在顯示屏上實現(xiàn)字符的輸入,在Linux環(huán)境下,利用QT/E庫軟件,實現(xiàn)了軟鍵盤設計。主要介紹了軟鍵盤的設計以及軟鍵盤實現(xiàn)的程序編寫。

隨著對嵌入式系統(tǒng)體積小型化和操作人性化的要求,以及大尺寸觸摸式顯示屏的廣泛應用,在嵌入式系統(tǒng)中采用軟鍵盤實現(xiàn)字符的輸入,已經成為目前的發(fā)展主流。QT是一個跨平臺的C++圖形界面庫,是由挪威TrollTech公司推出的產品。它采用的是面向對象的程序設計思想,因此,具有良好的可擴展性和可移植性,同時支持多個GUI平臺的交互開發(fā)。QT采用了良好的封裝機制,使得它的模塊化程度非常高,可重用性好,開發(fā)方便。憑借其良好的性能,QT已成為目前GUI開發(fā)中使用最為廣泛的圖形界面庫之一。QT/E(QT/Embedded)是用于嵌入式系統(tǒng)的QT版本。QT/E去掉了對XLib的依賴而直接工作于Frame Buffer上,因而效率更高,文中主要使用QT4.5.3版本,在嵌入式Linux環(huán)境下實現(xiàn)軟鍵盤設計。

1 QT/E體系結構

QT/E是2001年Trolltech公司開發(fā)的一款面向嵌入式系統(tǒng)的QT版本。它采用輕量級窗口系統(tǒng),完全摒棄了底層的XLib,以Framebuffer作為底層圖形接口,極大地減少了對內存的消耗。QT/E在上層仍然保持著原來的QT架構,因此,針對在Xwindow上設計的QT程序仍然具有很好的移植性。QT/E的基本體系結構如圖1所示。

1)QT/E體系結構中的圖形引擎是通過相關的圖形算法和Framebuffer操作底層的硬件設備來實現(xiàn)的;事件驅動則是通過底層的輸入輸出設備驅動來實現(xiàn)對外界事件的響應。

2)如圖1所示,由圖形引擎層實現(xiàn)對圖形界面的繪圖操作,然后由QT基本類提供對外界的操作接口。其中,圖形類提供圖形操作接口,比如:畫線、畫矩形等;控件類通過繼承公共抽象類QWidget來實現(xiàn)基本的控件,為外界提供接口。

2 QT/E通信機制

在圖形界面編程時,我們經常要實現(xiàn)界面之間的相互切換或者相互通知,更具體的來說就是需要實現(xiàn)類與類之間的相互通信。比如,在軟鍵盤的設計中,當一個事件產生時,系統(tǒng)就會發(fā)出一個信號。信號和槽(Signal&slot)機制是QT的核心特征,在QT庫中有很多已經設置好的信號,比如:clicked()、triggered()等,開發(fā)人員也可以根據(jù)需要來自定義某些信號。事件的響應對應著QT窗口里的槽函數(shù),和信號類似,系統(tǒng)有很多預定義的槽,比如exit()、quit()等,用戶也可以根據(jù)需要來添加自己的槽函數(shù)。

當對象改變其狀態(tài)時,信號就由該對象發(fā)射(emit)出去,這就是對象所要做的全部事情,它不知道另一端是誰在接收這個信號。這就是真正的信息封裝,它確保對象被當作一個真正的軟件組件來使用。槽用于接收信號,但它們是普通的對象成員函數(shù)。一個槽并不知道是否有任何信號與自己相連接。而且,對象并不了解具體的通信機制??梢詫⒑芏嘈盘柵c單個槽進行連接,也可以將單個信號與很多槽進行連接,甚至于將一個信號與另外一個信號相連接也是可能的。

因此,整個QT窗口的設計簡單、靈活且擴展性好。信號與槽之間的鏈接一般用connect()函數(shù)來實現(xiàn),具體關聯(lián)方式和實現(xiàn)函數(shù)如圖2所示:


3 基于QT/E軟鍵盤的實現(xiàn)

文中主要根據(jù)項目的實際需要,在軟鍵盤上制定了數(shù)字鍵、字母鍵、退出鍵和確定鍵。具體分兩步實現(xiàn),第一步:在基于linux環(huán)境的PC機上制定軟鍵盤,并編寫代碼實現(xiàn)其按鍵功能;第二步:生成能夠在ARM板上運行的代碼,并移植到ARM板上。

3.1 PC機x11環(huán)境下制定軟鍵盤的模型

根據(jù)項目的實際需求,在PC機x11/QT環(huán)境下設計了軟鍵盤界面,該軟鍵盤具有數(shù)字鍵、字母鍵、退出鍵和確定鍵,總共42個按鍵,如圖3所示。在linux環(huán)境的QT designer下,創(chuàng)建新的widget,然后根據(jù)項目中所需要的按鍵個數(shù)來確定軟鍵盤的大小,在此,選擇軟鍵盤的外框大小為:540x160。軟鍵盤外框搭建完成之后,需要在軟鍵盤區(qū)域內加入實際所需要的按鍵。將Widget Box下Buttons選項中的PushButton按鍵拖入到軟鍵盤區(qū)域內,在PushButton按鍵屬性的文本編輯中填入按鍵值,比如“1”。在PushButton按鍵屬性的名字編輯中填入按鍵名,比如“n1”。

同理,在軟鍵盤區(qū)域內拖入實際所需要按鍵個數(shù)的按鍵,根據(jù)所需要的鍵值修改每個按鍵上面的文本屬性和名字屬性。按照一般鍵盤的布局對它們進行排列

3.2 軟鍵盤實現(xiàn)

如圖3所示,首先建立了足項目要求的軟鍵盤的基本模型,接下來要實現(xiàn)的就是當按鍵響應時能夠讀出鍵盤值并將其發(fā)送出去,具體實現(xiàn)的流程如圖4所示。

圖4中,初始化按鍵時,可以使用QSignalMapper類來捆綁不同按鍵所發(fā)送的一系列無參數(shù)信號,并將其轉發(fā)為有參數(shù)的信號:
QSignalMapper*mapper=new QSignalMapper(this);
QSignalMapper的主要應用為可以實現(xiàn)一個函數(shù)響應不同按鈕的功能,下面舉例來說明圖4的具體實現(xiàn)過程:

首先設置軟鍵盤界面名稱為ui,然后以數(shù)字鍵“1”為例:將在圖3中數(shù)字鍵1對應的按鍵名稱設為:n1,在圖4中的第(1)步中,建立鍵值“1”所對應的映射,代碼如下:

mapper->setMapping(ui.n1,“1”);

接著,在圖4中的第(2)步,需要建立鍵值clicked對應的信號與槽之間的關系代碼如下:

connect(ui.n1,SIGNAL(clicked()),mapper,SLOT(map()));

最后,將所需要用到的字母或者數(shù)字通過上述方式連接到槽函數(shù)中。如圖4中的(3),將這些所要求得到的字母或者數(shù)字發(fā)送給焦點控件,代碼如下:

connect(mapper,signal(mapped(const QString&)),im,slot(sendcontent(const QStling&)))

上面語句中sendcontent()函數(shù)為發(fā)射子函數(shù),具體代碼如下:
sendCommitString(content);(1)
content.clear();(2)
語句(1)將焦點控件內的字母和數(shù)字發(fā)送出去,語句(2)清除發(fā)送框中的字母和數(shù)字,供下一次使用。

可以采用同樣的方式,對軟鍵盤中其它的按鍵進行映射函數(shù)和連接函數(shù)的編寫,然后在arm-linux-gcc環(huán)境下編譯,生成可以在arm板上運行的二進制文件。

3.3 下載到目標板上運行

本文的設計思路是:先將程序代碼在PC機上調試通過,然后將調試通過的程序代碼在RAM-linux-gcc環(huán)境下進行編譯,生成可以在RAM板上運行的二進制文件,最后將此二進制文件下載到目標板中。本文的前提是QT4.5.3環(huán)境已經移植到開發(fā)板上,具體移植步驟在這里不作介紹。在終端上面,運行啟動軟鍵盤指令,命令行后面加上“-qws”指令,運行結果如圖5所示。

圖5是在實際項目中需要的預設手機號碼的界面,在系統(tǒng)運行前要先設置手機號碼,以便系統(tǒng)故障時能夠自動的給對應的手機用戶發(fā)送預警信息,使用戶能夠實時的了解自己系統(tǒng)的運行狀態(tài)。在該界面中,準備預設手機號碼時,直接選擇打開軟鍵盤按鈕,圖3所示的預制的軟鍵盤會彈出界面,選擇要求預設的手機號碼值,完成之后選擇exit按鍵,軟鍵盤關閉。在此就可以用圖5所示的軟鍵盤完成手機號碼的預設。

4 結束語

隨著Linux操作系統(tǒng)的廣泛應用以及人們對GUI人機交互界面的更多需求,本文在linux操作系統(tǒng)的QT開發(fā)套件下,分析了軟鍵盤實現(xiàn)的原理,并完成了軟鍵盤的設計。此軟件盤可以根據(jù)用戶的要求來添加按鍵,與外部接入實體鍵盤相比,不僅便利,還節(jié)約成本。通過實踐證明此軟鍵盤具有較強的實時性和可靠性,可以廣泛的應用于各種QT界面中。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

CPU親和度通過限制進程或線程可以運行的CPU核心集合,使得它們只能在指定的CPU核心上執(zhí)行。這可以減少CPU緩存的失效次數(shù),提高緩存命中率,從而提升系統(tǒng)性能。

關鍵字: Linux 嵌入式

在Linux系統(tǒng)性能優(yōu)化中,內存管理與網(wǎng)絡連接處理是兩大核心領域。vm.swappiness與net.core.somaxconn作為關鍵內核參數(shù),直接影響系統(tǒng)在高負載場景下的穩(wěn)定性與響應速度。本文通過實戰(zhàn)案例解析這兩個...

關鍵字: Linux 內存管理

對于LLM,我使用b谷歌Gemini的免費層,所以唯一的成本是n8n托管。在使用了n8n Cloud的免費積分后,我決定將其托管在Railway上(5美元/月)。然而,由于n8n是開源的,您可以在自己的服務器上托管它,而...

關鍵字: 人工智能 n8n Linux

在Linux系統(tǒng)管理中,權限控制是安全運維的核心。本文通過解析/etc/sudoers文件配置與組策略的深度應用,結合某金融企業(yè)生產環(huán)境案例(成功攔截98.7%的非法提權嘗試),揭示精細化權限管理的關鍵技術點,包括命令別...

關鍵字: Linux 用戶權限 sudoers文件

Linux內核中的信號量(Semaphore)是一種用于資源管理的同步原語,它允許多個進程或線程對共享資源進行訪問控制。信號量的主要作用是限制對共享資源的并發(fā)訪問數(shù)量,從而防止系統(tǒng)過載和數(shù)據(jù)不一致的問題。

關鍵字: Linux 嵌入式

在云計算與容器化技術蓬勃發(fā)展的今天,Linux網(wǎng)絡命名空間(Network Namespace)已成為構建輕量級虛擬網(wǎng)絡的核心組件。某頭部互聯(lián)網(wǎng)企業(yè)通過命名空間技術將測試環(huán)境資源消耗降低75%,故障隔離效率提升90%。本...

關鍵字: Linux 云計算

在Linux內核4.18+和主流發(fā)行版(RHEL 8/Ubuntu 20.04+)全面轉向nftables的背景下,某電商平臺通過遷移將防火墻規(guī)則處理效率提升40%,延遲降低65%。本文基于真實生產環(huán)境案例,詳解從ipt...

關鍵字: nftables Linux

在Linux設備驅動開發(fā)中,等待隊列(Wait Queue)是實現(xiàn)進程睡眠與喚醒的核心機制,它允許進程在資源不可用時主動放棄CPU,進入可中斷睡眠狀態(tài),待資源就緒后再被喚醒。本文通過C語言模型解析等待隊列的實現(xiàn)原理,結合...

關鍵字: 驅動開發(fā) C語言 Linux

在Unix/Linux進程間通信中,管道(pipe)因其簡單高效被廣泛使用,但默認的半雙工特性和無同步機制容易導致數(shù)據(jù)競爭。本文通過父子進程雙向通信案例,深入分析互斥鎖與狀態(tài)機在管道同步中的應用,實現(xiàn)100%可靠的數(shù)據(jù)傳...

關鍵字: 管道通信 父子進程 Linux

RTOS :RTOS的核心優(yōu)勢在于其實時性。它采用搶占式調度策略,確保高優(yōu)先級任務能夠立即獲得CPU資源,從而在最短時間內完成處理。RTOS的實時性是通過嚴格的時間管理和任務調度算法實現(xiàn)的,能夠滿足對時間敏感性要求極高的...

關鍵字: Linux RTOS
關閉