在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

玩Qt,這三種使用ui文件的方式不得不知!

嵌入式小生 ? 來源:嵌入式小生 ? 2023-01-31 13:28 ? 次閱讀

一、導讀

本質上,Qt Designer的ui文件是一個以XML格式書寫的文件,文件中內容描述了一個界面的widget關系樹。這個文件在以下兩種情況中會使用到:

(1)在編譯的時候,這意味著ui文件將被轉換為可編譯的C++代碼,這個過程由uic完成。

(2)在應用程序運行的時候,ui文件將由QUiLoader類處理,該類用于解析XML文件并動態構造widget樹。

本文描述第一種情況:在編譯的時候使用ui文件。描述ui文件背后的機制,以及如何在應用程序中使用設計好的ui文件。

二、編譯過程中對ui文件的處理

在實際項目開發中,使用Qt Designer創建用戶界面組件(當然也完全可以使用代碼描述),并使用Qt的集成構建工具qmake和uic在構建應用程序時生成中間代碼,這個過程是由集成開發環境完成的。生成的代碼包含了ui文件中描述的用戶界面對象,它是一個C++結構體,包含以下內容:

(1)指向窗體小部件、布局、布局項、按鈕組和操作的指針。

(2)名為setupUi()的成員函數,用于在父部件上構建部件樹。

(3)名為retranslateUi()的成員函數,用于處理ui文件字符串屬性的轉換。

生成的代碼可以在應用程序中包含,并可以直接使用。除此之外,還可以用于擴展標準小部件的子類。

了解了QtCreator對ui文件背后的處理機制,下文將來看看如何在編譯構建過程中使用ui文件。

三、在編譯過程中如何使用ui文件

主要有三種方法在編譯過程中使用ui文件:1、直接附加、2、單繼承方式、3、多繼承方式。

1、直接附加:構造一個小部件作為組件的占位符,并在其中設置用戶界面。

2、單繼承方式:子類化Qt標準界面元素的基類(例如QWidget或QDialog),并包含ui用戶界面對象的私有實例。

3、多繼承方式:將ui文件的基類和ui文件的用戶接口對象都子類化。因此這可以在從子類的范圍內直接使用ui文件中定義的小部件。

(3-1)直接附加方式

本文中,筆者創建一個名為widget.ui的ui文件:

7580f59e-a121-11ed-bfe3-dac502259ad0.png


為了使用直接附加的方法使用ui文件,直接在main.cpp中包含ui_widget.h文件:

#include"ui_widget.h"

然后在主函數中構造一個標準的QWidget,用于創建widget小部件,接著我們則使用這個QWidget來托管由widget描述的用戶界面ui文件,完整代碼如下:

#include"ui_widget.h"

intmain(intargc,char*argv[])
{
QApplicationapp(argc,argv);

QWidget*w=newQWidget;
Ui::Widgetui;
ui.setupUi(w);

w->show();

returnapp.exec();
}

直接附加方法是一種在應用程序中快速使用組件的簡單方法。但是在實際開發中,使用Qt Designer創建的組件通常需要與應用程序的其余代碼進行緊密的集成。例如,上面提供的widget代碼將編譯并運行,但是界面中的對象之間不會進行交互。為了實現界面中對象之間的交互,則需要使用單繼承方式。

(3-2)單繼承方式

使用單繼承方式,需要子類化一個標準的Qt小部件,并在其中包括ui用戶界面對象的私有實例。可以采取以下兩種方式的任意一種:

(1)成員變量方式

(2)指向成員變量的指針

成員變量方式

在這種方法中,子類化一個Qt小部件,并在構造函數中setupUi()用戶界面。以這種方式使用的組件會將ui文件中使用的小部件和布局公開給Qt小部件子類,并提供一個標準系統,用于在用戶界面和應用程序中的其他對象之間建立信號和槽函數連接。

為了確保可以正常使用用戶界面,需要在子類化的Qt小部件描述文件中包含uic生成的頭文件,然后引用Ui::Widget(本文是Widget.ui界面文件):

7591f6dc-a121-11ed-bfe3-dac502259ad0.png


子類化一個Qt小部件子類的構造函數通過調用ui對象的setupUi()函數來構造和配置界面中的所有小部件和布局:

75a13304-a121-11ed-bfe3-dac502259ad0.png


這種方法的優點是:簡單使用繼承來提供基于QWidget的接口,并將用戶界面小部件變量封裝在ui數據成員中。我們可以使用這個方式在同一個小部件中定義多個用戶界面,每個界面都包含在自己的名稱空間中,并可以覆蓋(或組合)它們。

指向成員變量的指針

采用這種方式,在ui用戶界面對象的寫法上就變成了指向Ui::Widget的指針,且在名稱空間中對界面對象進行了提前聲明:

75c1abde-a121-11ed-bfe3-dac502259ad0.png


對應的源文件則是:

75cf59aa-a121-11ed-bfe3-dac502259ad0.png


這種方法的優點是:用戶界面對象可以預先聲明,這意味著不必在頭文件中包含生成的ui_Widget.h文件,然后可以在不重新編譯相關源文件的情況下更改ui文件。

可見,這兩種方法都能使用ui文件,但推薦使用指向成員變量的指針的方式使用ui文件,這也是庫和大型應用程序開發的方法,況且使用QtCreator新文件創建向導添加的ui界面類則是以這種方式生成的代碼。

(3-3)多繼承方式

使用Qt Designer創建的ui文件可以與標準的基于QWidget的類一起子類化。通過這種方式,則可以在子類的范圍內直接訪問ui文件中定義的所有用戶界面組件,并能夠使用connect()函數建立界面對象之間的信號和槽函數連接。

本文創建了Widget.ui界面描述文件,首先則需要在子類中包含使用uic生成的頭文件:

#include"ui_widget.h"

接著在這個類的定義中需繼承QWidget和Ui::Widget,可以私有的繼承Ui::Widget,以確保用戶界面對象在子類中是私有的。當然還可以使用public或protected關鍵字,就像在前面的例子中可以設置ui為public或protected一樣。如下所示:

75db84dc-a121-11ed-bfe3-dac502259ad0.png


對應的源碼文件則是:

75ea0746-a121-11ed-bfe3-dac502259ad0.png


在多繼承方式中,用戶界面中使用的小部件的訪問方式與手工在代碼中創建的小部件的一樣。除此之外,我們不再需要ui前綴來訪問這些小部件了。

四、總結

以上三種在應用程序編譯時使用ui文件的方法,其目的都是以如何在應用程序設計和編寫中使用UI文件為目的展開的。直接附加方法較為簡單,在開發中幾乎不使用。單繼承方式較為常用,其次是多繼承方式。

審核編輯:湯梓紅

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

    關注

    0

    文章

    188

    瀏覽量

    33142
  • 文件
    +關注

    關注

    1

    文章

    570

    瀏覽量

    24822
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    62972
  • C++
    C++
    +關注

    關注

    22

    文章

    2114

    瀏覽量

    73857
  • Qt
    Qt
    +關注

    關注

    1

    文章

    308

    瀏覽量

    38066

原文標題:玩Qt,這三種使用ui文件的方式不得不知!

文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    伺服電機的三種控制方式

    伺服電機控制方式有脈沖、模擬量和通訊這三種,在不同的應用場景下,我們該如何選擇伺服電機的控制方式呢?
    發表于 08-17 11:01 ?7160次閱讀

    debugInRam,與debuginflash,reinflash這三種燒寫方式有什么區別?

    我買的是一個lpc2131的arm板子然后總是出現以下情況,我用的是jlink,這樣之后就沒法燒代碼了,然后只有用j-tag燒寫之后才能重新編碼?我用的燒寫方式是debugInRam,另外與debuginflash,reinflash這三種
    發表于 02-20 18:34

    模電設計不得不看——模擬電路設計原則

    模電設計不得不看——模擬電路設計原則
    發表于 08-17 21:26

    不得不看的藍牙4.0組網實驗教程

    不得不看的藍牙4.0組網實驗教程
    發表于 02-26 16:33

    stm32的三種編程下載方式

    J-link幾乎可以調試所有的arm芯片,不得不說是個好東東。這里記錄三種stm32的下載程序方式:1.J-Flash下載(需要用到J-link)2.MDK配置下載(需要用到J-link)3.ISP
    發表于 06-24 20:50

    請問stm32啟動的三種方式是什么意思?

    請群主詳細解釋下這三種啟動方式,看了參考資料不是很明白其意!謝謝!
    發表于 07-17 04:35

    伺服電機的三種控制方式怎么選

    一般伺服都有三種控制方式:速度控制方式,轉矩控制方式,位置控制方式。大多數人想知道的就是這三種
    發表于 01-29 07:28

    在main函數運行之前,你不得不知的那些事

    在main函數運行之前,不得不知的那些事在c_int00函數中完成的功能有哪些?
    發表于 04-20 06:03

    設計PCB不得不關注的重點

    設計PCB不得不關注的重點
    發表于 04-21 06:24

    STM32支持三種啟動方式

    正文不得不提的啟動方式STM32支持三種啟動方式 1. FLASH啟動 2. SRAM啟動 3. 系統存儲器啟動這三種啟動順序決定了上電后第
    發表于 08-23 06:03

    如何使用三種方式進行文件的創建

    ,使用文本編輯器進行創建,使用重定向符號進行創建,接下來就演示如何使用這三種方式進行文件的創建。使用touch命令進行文件創建touch命令最初的作用是對
    發表于 12-15 08:42

    伺服電機的三種控制方式該如何應用

    一般伺服都有三種控制方式:速度控制方式,轉矩控制方式,位置控制方式。大多數人想知道的就是這三種
    的頭像 發表于 12-14 23:12 ?5486次閱讀

    如何應用伺服電機的三種控制方式

    一般伺服都有三種控制方式:速度控制方式,轉矩控制方式,位置控制方式。大多數人想知道的就是這三種
    發表于 01-22 06:30 ?7次下載
    如何應用伺服電機的<b class='flag-5'>三種</b>控制<b class='flag-5'>方式</b>

    不得不收藏的PCB的Checklist!

    不得不收藏的PCB的Checklist
    發表于 02-09 10:46 ?37次下載
    <b class='flag-5'>不得不</b>收藏的PCB的Checklist!

    8051單片機的這三種數據傳輸方式,你了解多少?

    單片機CPU與外部設備交換信息通常有如下幾種方式:無條件傳送方式,查詢傳送方式和中斷傳送方式。我們以單片機與微型打印機接口為例講述這三種
    發表于 02-10 11:00 ?1次下載
    8051單片機的<b class='flag-5'>這三種</b>數據傳輸<b class='flag-5'>方式</b>,你了解多少?
    主站蜘蛛池模板: 亚洲韩国欧美一区二区三区 | 亚综合| 全黄h全肉边做边吃奶在线观看 | 婷婷丁香色综合狠狠色 | 激情综合视频 | 人人搞人人 | 99热官网| 国产三级在线视频观看 | yy6080亚洲半夜理论一级毛片 | 思思久久好好热精品国产 | 国产视频二区 | 视频在线观看免费网站 | 日韩毛片大全免费高清 | 1024 在线观看视频免费 | 日本精品视频四虎在线观看 | 亚洲精品国产自在久久出水 | 萌白酱香蕉白丝护士服喷浆 | 精品久久久久久 | 日本黄色录像 | 欧美爽爽 | 高清一区二区三区 | 免费网站成人亚洲 | 国产小视频在线播放 | 天天躁夜夜躁狠狠躁2021a | 亚洲一区二区中文字5566 | 91大神在线视频观看 | 日韩黄页 | 久久久久久天天夜夜天天 | 亚洲乱码卡一卡二卡三永久 | 婷婷草 | 四虎影像| 日韩在线天堂免费观看 | 香港三级在线视频 | 天天干天日 | 亚洲a视频 | 永久黄色免费网站 | 国产成人精品免费视频大全可播放的 | 欧美精品一区二区三区在线播放 | 人人九九精 | sao虎在线精品永久 se94se欧美 | 国产日本特黄特色大片免费视频 |