衡阳派盒市场营销有限公司

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

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

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

學(xué)Qt,此問(wèn)題必解!

嵌入式小生 ? 來(lái)源:嵌入式小生 ? 2023-01-04 14:25 ? 次閱讀

最近有小伙伴問(wèn)到:在Qt開發(fā)中,當(dāng)使用QtCreator自帶的工程向?qū)?chuàng)建了一個(gè)類后,如下代碼所示:

ca0a5f9a-8bf2-11ed-bfe3-dac502259ad0.png

問(wèn)題來(lái)了:上圖紅色矩形框圈出的兩個(gè)地方描述的是同一個(gè)類嗎

首先這個(gè)問(wèn)題剛接觸Qt的時(shí)候可能會(huì)有此一問(wèn),在此處記錄一下。這里需要知道上述代碼是QtCreator自動(dòng)生成的(如果使用向?qū)?chuàng)建一個(gè)類)。

用同樣的方法新創(chuàng)建一個(gè)類,(用鼠標(biāo)點(diǎn)擊工程項(xiàng)目后,右鍵單擊,選擇“添加新文件”,在彈出的對(duì)話框中,選擇Qt->Qt設(shè)計(jì)師界面類->Widget)將會(huì)彈出“選擇類名”對(duì)話框:

ca3274a8-8bf2-11ed-bfe3-dac502259ad0.png

在上圖中,默認(rèn)情況下其頭文件、源文件和Form文件都是同一個(gè)命名,點(diǎn)擊下一步后則創(chuàng)建一個(gè)名為Form的類,該類位于form.h/.cpp中。在from.h頭文件中,該類定義如下:

ca4d807c-8bf2-11ed-bfe3-dac502259ad0.png

可以看到,Form類和MainWindow類在生成方式上是一樣的。

好啦,如果我們?cè)谛聞?chuàng)建類的時(shí)候?yàn)槠渲匦旅?img src="https://file1.elecfans.com//web2/M00/9E/A2/wKgZomToHN2AQznDAAEQ7fGTfcg547.png" alt="ca6b643e-8bf2-11ed-bfe3-dac502259ad0.png" />其自動(dòng)生成的代碼還是那種方式的寫法:ca74bf84-8bf2-11ed-bfe3-dac502259ad0.png

至此,得出一個(gè)結(jié)論:

這是QtCreator的固定寫法,當(dāng)我們新創(chuàng)建類的時(shí)候,QtCreator這個(gè)IDE會(huì)自動(dòng)生成。

言歸正傳,回到本文的問(wèn)題,下圖中紅色圈出的地方,雖然在名稱上是一樣的,但是他倆不是同一個(gè)東西。由于使用了QtCreator的類創(chuàng)建向?qū)?chuàng)建類,所以他們?cè)诿Q上是一樣的ca7cce9a-8bf2-11ed-bfe3-dac502259ad0.png

上述問(wèn)題還引出了另一個(gè)問(wèn)題:Qt中界面與邏輯的分離,在這一點(diǎn)上應(yīng)該很好的體現(xiàn)這一思想。接著往下看:

QT_BEGIN_NAMESPACE
namespaceUi{classMainWindow;}
QT_END_NAMESPACE

本質(zhì)上,上述代碼是UI界面類的聲明:QT_BEGIN_NAMESPACEQT_END_NAMESPACE兩個(gè)宏定義是Qt對(duì)命名空間的一個(gè)包裝,上述語(yǔ)句中,class MainWindow;則是指界面類。當(dāng)我們的工程在編譯構(gòu)建后,會(huì)生成一個(gè)類似于ui_xxx.h的文件,界面類則放置在這個(gè)文件中,本文則是ui_mainwindow.h,該文件會(huì)在對(duì)應(yīng)的源文件中包含:ca9c75ba-8bf2-11ed-bfe3-dac502259ad0.png

注:ui_xxx.h是由QtCreator根據(jù)界面中的組成元素自動(dòng)生成的,可在對(duì)應(yīng)的xxx.ui文件中查看該類中包含了哪些界面組成元素。

由于此處mainwindow.ui文件中沒有放置多余的界面元素,故生成的文件比較簡(jiǎn)單,這里是ui_mainwindow.h文件,自動(dòng)生成代碼如下:

#ifndefUI_MAINWINDOW_H
#defineUI_MAINWINDOW_H

#include
#include
#include
#include
#include
#include

QT_BEGIN_NAMESPACE

classUi_MainWindow
{
public:
QWidget*centralwidget;
QMenuBar*menubar;
QStatusBar*statusbar;

voidsetupUi(QMainWindow*MainWindow)
{
if(MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
MainWindow->resize(800,600);
centralwidget=newQWidget(MainWindow);
centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
MainWindow->setCentralWidget(centralwidget);
menubar=newQMenuBar(MainWindow);
menubar->setObjectName(QString::fromUtf8("menubar"));
MainWindow->setMenuBar(menubar);
statusbar=newQStatusBar(MainWindow);
statusbar->setObjectName(QString::fromUtf8("statusbar"));
MainWindow->setStatusBar(statusbar);

retranslateUi(MainWindow);

QMetaObject::connectSlotsByName(MainWindow);
}//setupUi

voidretranslateUi(QMainWindow*MainWindow)
{
MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow","MainWindow",nullptr));
}//retranslateUi

};

namespaceUi{
classMainWindow:publicUi_MainWindow{};
}//namespaceUi

QT_END_NAMESPACE

#endif//UI_MAINWINDOW_H

從上述代碼可見,在mainwindow.h文件中的:

namespaceUi{classMainWindow;}

則是對(duì)ui_mainwindow.h文件中定義的MainWindow的聲明。回到mainwindow.h文件中,在MainWindow類中有一個(gè)私有數(shù)據(jù)成員:ui指針,該指針指向了Ui::MainWindow,且在mainwindow.cpp文件中實(shí)例了Ui::MainWindow類,而且還通過(guò)ui指針調(diào)用了setupUi()函數(shù)初始化了界面。在Qt中,正是通過(guò)這種方式將界面與邏輯進(jìn)行了關(guān)聯(lián)。

一個(gè)軟件界面由很多界面元素組成,在實(shí)際工程開發(fā)中,通過(guò)QtCreator可以在xxx.ui文件中使用鼠標(biāo)快速進(jìn)行布局和創(chuàng)建界面組成元素。在對(duì)應(yīng)的xxx.h/.cpp文件中使用ui指針則可以引用xxx.ui文件中生成的界面元素。

『這正是Qt框架的特性!』



審核編輯 :李倩


聲明:本文內(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)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4825

    瀏覽量

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

    關(guān)注

    1

    文章

    308

    瀏覽量

    38065
  • 矩形
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    12625

原文標(biāo)題:學(xué)Qt,此問(wèn)題必解!

文章出處:【微信號(hào):嵌入式小生,微信公眾號(hào):嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Qt Group發(fā)布Qt Accelerate,加速數(shù)字產(chǎn)品開發(fā)進(jìn)程

    Qt Group近日正式推出了Qt Accelerate,這是一款專為快速構(gòu)建數(shù)字應(yīng)用而設(shè)計(jì)的解決方案,旨在滿足工業(yè)制造、移動(dòng)出行、消費(fèi)類電子等多個(gè)領(lǐng)域的需求。 Qt Accelerate基于
    的頭像 發(fā)表于 01-13 11:19 ?193次閱讀

    馳AI辦公本Turbo重磅發(fā)布

    近日,思馳AI辦公本新品發(fā)布會(huì)如約而至,思馳IOT事業(yè)部首席產(chǎn)品官馬斌斌詳細(xì)介紹了思馳在智慧辦公領(lǐng)域的深入思考和創(chuàng)新實(shí)踐,并推出了思馳AI辦公本Turbo。
    的頭像 發(fā)表于 10-31 14:23 ?619次閱讀

    什么是光子學(xué)

    ? 本文概述了光子學(xué),包括其基本原理、關(guān)鍵技術(shù)、應(yīng)用和新興趨勢(shì)。 一、光子學(xué)的基本原理 光子學(xué)是一門研究光和其他形式輻射能的學(xué)科。它涉及使用光學(xué)元件、激光、光纖和電子光學(xué)儀器來(lái)產(chǎn)生、操縱和檢測(cè)光。它
    的頭像 發(fā)表于 10-29 06:21 ?251次閱讀

    粒子探測(cè)器與什么相似

    粒子探測(cè)器與某些類型的火災(zāi)探測(cè)器在功能和原理上有相似之處,但并非完全等同。以下是一些與熱粒子探測(cè)器相似的探測(cè)器類型及其相似點(diǎn): 煙霧探測(cè)器 : 相似點(diǎn) :兩者都關(guān)注火災(zāi)早期產(chǎn)生的物質(zhì)變化。煙霧
    的頭像 發(fā)表于 09-25 14:57 ?460次閱讀

    芯科技發(fā)布“芯P1”異構(gòu)高能效芯片,引領(lǐng)AI PC新紀(jì)元

    近日,芯科技集團(tuán)有限公司(簡(jiǎn)稱“芯科技”)在上海隆重舉辦了AI PC戰(zhàn)略發(fā)布會(huì),正式揭曉了其首款創(chuàng)新力作——“芯P1”異構(gòu)高能效芯片。這一里程碑式的發(fā)布,標(biāo)志著國(guó)產(chǎn)芯片在AI PC領(lǐng)域邁出了堅(jiān)實(shí)的一步,為行業(yè)帶來(lái)了前所未有
    的頭像 發(fā)表于 08-01 17:42 ?924次閱讀

    EtherCAT運(yùn)動(dòng)控制器上位機(jī)之Python+Qt(一):鏈接與單軸運(yùn)動(dòng)

    PC上位機(jī)Python+Qt混合編程,助力智能制造高效開發(fā)。
    的頭像 發(fā)表于 07-31 09:43 ?491次閱讀
    EtherCAT運(yùn)動(dòng)控制器上位機(jī)之Python+<b class='flag-5'>Qt</b>(一):鏈接與單軸運(yùn)動(dòng)

    QT5+OpenCV4搭建應(yīng)用開發(fā)環(huán)境

    作為深度學(xué)習(xí)算法工程師,必須要掌握應(yīng)用開發(fā)技能嗎?搞工程肯定是必須要會(huì)界面開發(fā),QT就是一個(gè)很不錯(cuò)的選擇。本文以QT5.15 + OpenCV4.8 + OpenVINO2023為例,搭建應(yīng)用開發(fā)環(huán)境,演示深度學(xué)習(xí)模型的QT應(yīng)用
    的頭像 發(fā)表于 07-23 11:23 ?1170次閱讀
    <b class='flag-5'>QT</b>5+OpenCV4搭建應(yīng)用開發(fā)環(huán)境

    基線算所需的起算點(diǎn)應(yīng)按何種順序采用

    在地理信息系統(tǒng)(GIS)和大地測(cè)量學(xué)中,基線算是一個(gè)關(guān)鍵的步驟,用于確定空間對(duì)象的精確位置。基線算通常涉及到多個(gè)起算點(diǎn),這些起算點(diǎn)的選取和排序?qū)τ?b class='flag-5'>解算的準(zhǔn)確性和效率至關(guān)重要。本文將
    的頭像 發(fā)表于 07-11 15:11 ?357次閱讀

    米爾NXP i.MX 93開發(fā)板的Qt開發(fā)指南

    1.概述Qt是一個(gè)跨平臺(tái)的圖形應(yīng)用開發(fā)框架,被應(yīng)用在不同尺寸設(shè)備和平臺(tái)上,同時(shí)提供不同版權(quán)版本供用戶選擇。米爾NXPi.MX93開發(fā)板(MYD-LMX9X開發(fā)板)使用Qt6.5版本進(jìn)行應(yīng)用開發(fā)。在
    的頭像 發(fā)表于 06-07 08:01 ?1841次閱讀
    米爾NXP i.MX 93開發(fā)板的<b class='flag-5'>Qt</b>開發(fā)指南

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

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

    易微再添新翼 易微青島辦事處正式成立

    易微砥礪奮進(jìn),再添新翼! 近日,易微青島辦事處正式成立,是易微在華東區(qū)域的又一重要戰(zhàn)略布局。 青島作為國(guó)家打造“一帶一路”國(guó)際合作新平臺(tái)的重點(diǎn)城市,將集成電路產(chǎn)業(yè)放在新興產(chǎn)業(yè)發(fā)展重要位置,匯集
    的頭像 發(fā)表于 04-14 10:34 ?475次閱讀

    電網(wǎng)列是什么意思?電網(wǎng)故障列裝置的作用與功能有哪些?

    一、電網(wǎng)列的概念電網(wǎng)列簡(jiǎn)單來(lái)說(shuō),就是當(dāng)電力系統(tǒng)因?yàn)槟承┰颍ū热缭O(shè)備故障或受到干擾)而失去穩(wěn)定,無(wú)法維持正常的同步運(yùn)行時(shí),為了防止事故擴(kuò)大,系統(tǒng)會(huì)自動(dòng)或手動(dòng)地將電網(wǎng)分成兩個(gè)或多個(gè)獨(dú)立的部分。這樣
    的頭像 發(fā)表于 03-29 12:00 ?7220次閱讀
    電網(wǎng)<b class='flag-5'>解</b>列是什么意思?電網(wǎng)故障<b class='flag-5'>解</b>列裝置的作用與功能有哪些?

    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 ?2777次閱讀
    <b class='flag-5'>Qt</b>上位機(jī)開發(fā)實(shí)戰(zhàn)案例

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

    本文檔主要說(shuō)明如何將已有 Qt 工程進(jìn)行編譯,生成可在評(píng)估板上正常運(yùn)行的 ARM 端 Qt 程序鏡像。 Qt 開發(fā)環(huán)境主要包括 Qt Creator 工具、X86 端
    的頭像 發(fā)表于 03-05 09:19 ?526次閱讀
    3562-<b class='flag-5'>Qt</b>工程編譯說(shuō)明

    QT開發(fā)學(xué)習(xí)筆記1(安裝交叉編譯器)

    QT安裝交叉編譯器
    的頭像 發(fā)表于 02-18 10:02 ?1125次閱讀
    <b class='flag-5'>QT</b>開發(fā)學(xué)習(xí)筆記1(安裝交叉編譯器)
    澳门新世纪娱乐城| 威尼斯人娱乐城网址是| 362百家乐的玩法技巧和规则 | 百家乐投注打三断| 百家乐官网强弱走势图| 网上赌百家乐官网的玩法技巧和规则| 风水罗盘24方位| 百家乐赌场论坛博客| 百家乐筹码币套装| 皇冠娱乐网| 黄梅县| 澳门百家乐官网怎玩| 淘宝博百家乐官网的玩法技巧和规则 | 百家乐游戏什么时间容易出对| 辽宁棋牌游戏大厅| 博白县| 赌博百家乐官网下载| 百家乐官网规则| 澳门百家乐765118118| 县级市| 百家乐官网破解仪恒达| 网上玩百家乐有钱| 百家乐策略介绍| 百家乐真人游戏| 伯爵百家乐官网娱乐场| 八卦24山叫什么意思是什么| 太阳城百家乐官网杀祖玛| 百家乐微心打法| 大发888娱乐城xiazai| 在线百家乐官网| 百家乐视频下栽| 大发888 894| 新葡京百家乐官网娱乐城 | 澳门百家乐官网小| 下载百家乐的玩法技巧和规则| 百家乐游戏机| 乐宝百家乐官网的玩法技巧和规则| 澳门百家乐群代理| 顶尖百家乐官网对单| 太阳城百家乐赌博害人| 边城棋牌中心|