新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Qt圖形編程基礎(chǔ)之:Qt/Embedded開發(fā)入門

        Qt圖形編程基礎(chǔ)之:Qt/Embedded開發(fā)入門

        作者: 時(shí)間:2013-09-13 來源:網(wǎng)絡(luò) 收藏

        本文引用地址:http://www.104case.com/article/257103.htm

        2.Qt的開發(fā)環(huán)境

        的開發(fā)環(huán)境可以取代那些我們熟知的UNIX和Windows開發(fā)工具。它提供了幾個(gè)跨平臺(tái)的工具使得開發(fā)變得迅速和方便,尤其是它的圖形設(shè)計(jì)器。UNIX下的開發(fā)者可以在PC機(jī)或者工作站使用虛擬緩沖幀,從而可以模仿一個(gè)和嵌入式設(shè)備的顯示終端大小,像素相同的顯示環(huán)境。

        嵌入式設(shè)備的應(yīng)用可以在安裝了一個(gè)跨平臺(tái)開發(fā)工具鏈的不同的平臺(tái)上編譯。最通常的做法是在一個(gè)UNIX系統(tǒng)上安裝跨平臺(tái)的帶有l(wèi)ibc庫(kù)的GNUC++編譯器和二進(jìn)制工具。在開發(fā)的許多階段,一個(gè)可替代的做法是使用Qt的桌面版本,例如通過Qt/X11或是Qt/Windows來進(jìn)行開發(fā)。這樣開發(fā)人員就可以使用他們熟悉的開發(fā)環(huán)境,例如微軟公司的VisualC++或者BorlandC++。在UNIX下,許多環(huán)境也是可用的,例如Kdevelop,它也支持交互式開發(fā)。

        如果的應(yīng)用是在UNIX平臺(tái)下開發(fā)的話,那么它就可以在開發(fā)的機(jī)器上以一個(gè)獨(dú)立的控制臺(tái)或者虛擬緩沖幀的方式來運(yùn)行,對(duì)于后者來說,其實(shí)是有一個(gè)X11的應(yīng)用程序虛擬了一個(gè)緩沖幀。通過指定顯示設(shè)備的寬度、高度和顏色深度,虛擬出來的緩沖幀將和物理的顯示設(shè)備在每個(gè)像素上保持一致。這樣每次調(diào)試應(yīng)用時(shí)開發(fā)人員就不用總是刷新嵌入式設(shè)備的Flash存儲(chǔ)空間,從而加速了應(yīng)用的編譯、鏈接和運(yùn)行周期。運(yùn)行Qt的虛擬緩沖幀工具的方法是在的圖形模式下運(yùn)行以下命令:

        qvfb(回車)

        當(dāng)Qt嵌入式的應(yīng)用程序要把顯示結(jié)果輸出到虛擬緩沖幀時(shí),我們?cè)诿钚羞\(yùn)行這個(gè)程序,并在程序名后加上-qws的選項(xiàng)。例如:$>hello–qws。

        3.Qt的支撐工具

        Qt包含了許多支持嵌入式系統(tǒng)開發(fā)的工具,有兩個(gè)最實(shí)用的工具是qmake和Qtdesigner(圖形設(shè)計(jì)器)。

        n qmake是一個(gè)為編譯庫(kù)和應(yīng)用而提供的Makefile生成器。它能夠根據(jù)一個(gè)工程文件(.pro)產(chǎn)生不同平臺(tái)下的Makefile文件。qmake支持跨平臺(tái)開發(fā)和影子生成,影子生成是指當(dāng)工程的源代碼共享給網(wǎng)絡(luò)上的多臺(tái)機(jī)器時(shí),每臺(tái)機(jī)器編譯鏈接這個(gè)工程的代碼將在不同的子路徑下完成,這樣就不會(huì)覆蓋別人的編譯鏈接生成的文件。qmake還易于在不同的配置之間切換。

        n Qt圖形設(shè)計(jì)器可以使開發(fā)者可視化地設(shè)計(jì)對(duì)話框而不需編寫代碼。使用Qt圖形設(shè)計(jì)器的布局管理可以生成能平滑改變尺寸的對(duì)話框。

        qmake和Qt圖形設(shè)計(jì)器是完全集成在一起的。

        12.2.2Qt/Embedded信號(hào)和機(jī)制

        1.機(jī)制概述

        信號(hào)和機(jī)制是Qt的核心機(jī)制,要精通Qt編程就必須對(duì)信號(hào)和有所了解。信號(hào)和插槽是一種高級(jí)接口,應(yīng)用于對(duì)象之間的通信,它是Qt的核心特性,也是Qt區(qū)別于其他工具包的重要地方。信號(hào)和插槽是Qt自行定義的一種通信機(jī)制,它獨(dú)立于標(biāo)準(zhǔn)的C/C++語言,因此要正確地處理信號(hào)和插槽,必須借助一個(gè)稱為moc(MetaObjectCompiler)的Qt工具,該工具是一個(gè)C++預(yù)處理程序,它為高層次的事件處理自動(dòng)生成所需要的附加代碼。

        所謂圖形用戶接口的應(yīng)用就是要對(duì)用戶的動(dòng)作做出響應(yīng)。例如,當(dāng)用戶單擊了一個(gè)菜單項(xiàng)或是工具欄的按鈕時(shí),應(yīng)用程序會(huì)執(zhí)行某些代碼。大部分情況下,是希望不同類型的對(duì)象之間能夠進(jìn)行通信。程序員必須把事件和相關(guān)代碼聯(lián)系起來,這樣才能對(duì)事件做出響應(yīng)。以前的工具開發(fā)包使用的事件響應(yīng)機(jī)制是易崩潰的,不夠健壯的,同時(shí)也不是面向?qū)ο蟮摹?/p>

        以前,當(dāng)使用回調(diào)函數(shù)機(jī)制把某段響應(yīng)代碼和一個(gè)按鈕的動(dòng)作相關(guān)聯(lián)時(shí),通常把那段響應(yīng)代碼寫成一個(gè)函數(shù),然后把這個(gè)函數(shù)的地址指針傳給按鈕,當(dāng)那個(gè)按鈕被單擊時(shí),這個(gè)函數(shù)就會(huì)被執(zhí)行。對(duì)于這種方式,以前的開發(fā)包不能夠確保回調(diào)函數(shù)被執(zhí)行時(shí)所傳遞進(jìn)來的函數(shù)參數(shù)就是正確的類型,因此容易造成進(jìn)程崩潰。另外一個(gè)問題是,回調(diào)這種方式緊緊地綁定了圖形用戶接口的功能元素,因而很難進(jìn)行獨(dú)立的開發(fā)。

        信號(hào)與插槽機(jī)制是不同的。它是一種強(qiáng)有力的對(duì)象間通信機(jī)制,完全可以取代原始的回調(diào)和消息映射機(jī)制。在Qt中信號(hào)和插槽取代了上述這些凌亂的函數(shù)指針,使得用戶編寫這些通信程序更為簡(jiǎn)潔明了。信號(hào)和插槽能攜帶任意數(shù)量和任意類型的參數(shù),它們是類型完全安全的,因此不會(huì)像回調(diào)函數(shù)那樣產(chǎn)生coredumps。

        圖12.2對(duì)象間信號(hào)與插槽的關(guān)系

        所有從QObject或其子類(例如Qwidget)派生的類都能夠包含信號(hào)和插槽。當(dāng)對(duì)象改變狀態(tài)時(shí),信號(hào)就由該對(duì)象發(fā)射(emit)出去了,這就是對(duì)象所要做的全部工作,它不知道另一端是誰在接收這個(gè)信號(hào)。這就是真正的信息封裝,它確保對(duì)象被當(dāng)作一個(gè)真正的軟件組件來使用。插槽用于接收信號(hào),但它們是普通的對(duì)象成員函數(shù)。一個(gè)插槽并不知道是否有任何信號(hào)與自己相連接。而且,對(duì)象并不了解具體的通信機(jī)制。

        用戶可以將很多信號(hào)與單個(gè)插槽進(jìn)行連接,也可以將單個(gè)信號(hào)與很多插槽進(jìn)行連接,甚至將一個(gè)信號(hào)與另外一個(gè)信號(hào)相連接也是可能的,這時(shí)無論第一個(gè)信號(hào)什么時(shí)候發(fā)射,系統(tǒng)都將立刻發(fā)射第二個(gè)信號(hào)。總之,信號(hào)與插槽構(gòu)造了一個(gè)強(qiáng)大的部件編程機(jī)制。

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

        linux相關(guān)文章:linux教程




        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 平顺县| 兰溪市| 定南县| 芦溪县| 安达市| 久治县| 龙南县| 布拖县| 孟连| 龙海市| 金堂县| 邻水| 铜梁县| 高邮市| 绍兴县| 涿州市| 集贤县| 天镇县| 兴安盟| 隆子县| 荔波县| 原阳县| 保德县| 阿克| 许昌县| 抚宁县| 慈利县| 财经| 龙门县| 宁蒗| 宁波市| 浏阳市| 台南市| 兰西县| 鲁山县| 三都| 长子县| 调兵山市| 濉溪县| 高唐县| 江陵县|