91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

3天內不再提示

學Qt,此問題必解!

嵌入式小生 ? 來源:嵌入式小生 ? 2023-01-04 14:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

最近有小伙伴問到:在Qt開發中,當使用QtCreator自帶的工程向導創建了一個類后,如下代碼所示:

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

問題來了:上圖紅色矩形框圈出的兩個地方描述的是同一個類嗎

首先這個問題剛接觸Qt的時候可能會有此一問,在此處記錄一下。這里需要知道上述代碼是QtCreator自動生成的(如果使用向導創建一個類)。

用同樣的方法新創建一個類,(用鼠標點擊工程項目后,右鍵單擊,選擇“添加新文件”,在彈出的對話框中,選擇Qt->Qt設計師界面類->Widget)將會彈出“選擇類名”對話框:

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

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

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

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

好啦,如果我們在新創建類的時候為其重新命名:ca6b643e-8bf2-11ed-bfe3-dac502259ad0.png其自動生成的代碼還是那種方式的寫法:ca74bf84-8bf2-11ed-bfe3-dac502259ad0.png

至此,得出一個結論:

這是QtCreator的固定寫法,當我們新創建類的時候,QtCreator這個IDE會自動生成。

言歸正傳,回到本文的問題,下圖中紅色圈出的地方,雖然在名稱上是一樣的,但是他倆不是同一個東西。由于使用了QtCreator的類創建向導創建類,所以他們在名稱上是一樣的ca7cce9a-8bf2-11ed-bfe3-dac502259ad0.png

上述問題還引出了另一個問題:Qt中界面與邏輯的分離,在這一點上應該很好的體現這一思想。接著往下看:

QT_BEGIN_NAMESPACE
namespaceUi{classMainWindow;}
QT_END_NAMESPACE

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

注:ui_xxx.h是由QtCreator根據界面中的組成元素自動生成的,可在對應的xxx.ui文件中查看該類中包含了哪些界面組成元素。

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

#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;}

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

一個軟件界面由很多界面元素組成,在實際工程開發中,通過QtCreator可以在xxx.ui文件中使用鼠標快速進行布局和創建界面組成元素。在對應的xxx.h/.cpp文件中使用ui指針則可以引用xxx.ui文件中生成的界面元素。

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



審核編輯 :李倩


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

    關注

    30

    文章

    4900

    瀏覽量

    70694
  • Qt
    Qt
    +關注

    關注

    2

    文章

    314

    瀏覽量

    39071
  • 矩形
    +關注

    關注

    0

    文章

    15

    瀏覽量

    12706

原文標題:學Qt,此問題必解!

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    馳與上海交大聯合實驗室研究成果入選兩大頂級會議

    近日,計算語言與自然語言處理領域全球頂級會議ACL 2025及語音研究領域旗艦會議INTERSPEECH 2025相繼公布論文錄用結果。思馳-上海交大聯合實驗室表現亮眼,共有13篇論文被兩大會議收錄!
    的頭像 發表于 07-11 16:24 ?171次閱讀
    思<b class='flag-5'>必</b>馳與上海交大聯合實驗室研究成果入選兩大頂級會議

    馳宣布,再獲新一輪融資

    電子發燒友網綜合報道 6月23日,思馳宣布,在年初5億元融資后,思馳近日又完成一筆新融資,主要來自產業投資方和老股東加投。此后思馳將繼續進一步加強公司在核心技術研發與場景化落地能力,重點加速
    的頭像 發表于 06-26 01:09 ?2991次閱讀

    馳AI辦公本亮相京東直播間

    近日,思馳董事長、CEO高始興與思馳IOT事業部首席產品官馬斌斌現身「京東3C數碼采銷」直播間,詳細介紹并演示了思馳AI辦公本的功能特點,并抽取了60個思馳AI全向會議麥克風M
    的頭像 發表于 06-09 11:10 ?521次閱讀

    基于RK3576開發板的QT GUI例程

    EASYEAI Orin-Nano開發板搭載了帶有xfce桌面環境的Debian系統,支持Qt應用程序的開發和運行。開發板采用RK3576 CPU,性能強大,可直接在板上編譯Qt應用程序,確保最佳
    的頭像 發表于 05-14 10:26 ?729次閱讀
    基于RK3576開發板的<b class='flag-5'>QT</b> GUI例程

    蘇州市領導蒞臨思馳調研

    近日,蘇州市委教育局工委書記、市教育局局長周志芳率隊蒞臨思馳進行調研,思馳董事長、CEO高始興,副總裁李春梅、明亮熱情接待。
    的頭像 發表于 04-24 15:40 ?339次閱讀

    EtherCAT運動控制器實時數據的Qt示波器

    基于QT開發調用正運動函數接口實現控制器數據實時監測的示波器效果
    的頭像 發表于 04-17 17:12 ?271次閱讀
    EtherCAT運動控制器實時數據的<b class='flag-5'>Qt</b>示波器

    【技術案例】Qt 環境部署 - Ubuntu 篇

    什么是QtQt是一個跨平臺C++圖形用戶界面應用程序開發框架,可構建高性能的桌面、移動及Web應用程序,也可用于開發非GUI程序,比如控制臺工具和服務器。Qt是面向對象的框架,使用特殊的代碼生成
    的頭像 發表于 04-16 17:17 ?516次閱讀
    【技術案例】<b class='flag-5'>Qt</b> 環境部署 - Ubuntu 篇

    ElfBoard技術貼|如何在ELF 1開發板上交叉移植Qt

    在嵌入式系統開發領域,針對特定硬件平臺進行Qt框架的移植與適配是一項關鍵技術任務。作為業界主流的跨平臺應用開發框架,Qt憑借其完善的圖形界面支持能力,在嵌入式開發圖形界面應用程序中占據重要地位。本文將基于ELF 1開發板詳細闡述Qt
    的頭像 發表于 02-24 16:18 ?619次閱讀
    ElfBoard技術貼|如何在ELF 1開發板上交叉移植<b class='flag-5'>Qt</b>

    Qt Group發布Qt AI Assistant,助力跨平臺UI開發

    為了進一步提升跨平臺用戶界面(UI)開發的效率與便捷性,Qt Group近日推出了一款實驗性工具——Qt AI Assistant。這款工具的問世,標志著Qt Group在簡化UI開發流程、減少
    的頭像 發表于 02-07 13:47 ?1129次閱讀

    Qt Group發布Qt Accelerate,加速數字產品開發進程

    Qt Group近日正式推出了Qt Accelerate,這是一款專為快速構建數字應用而設計的解決方案,旨在滿足工業制造、移動出行、消費類電子等多個領域的需求。 Qt Accelerate基于
    的頭像 發表于 01-13 11:19 ?601次閱讀

    馳AI辦公本Turbo重磅發布

    近日,思馳AI辦公本新品發布會如約而至,思馳IOT事業部首席產品官馬斌斌詳細介紹了思馳在智慧辦公領域的深入思考和創新實踐,并推出了思馳AI辦公本Turbo。
    的頭像 發表于 10-31 14:23 ?1501次閱讀

    什么是光子

    ? 本文概述了光子,包括其基本原理、關鍵技術、應用和新興趨勢。 一、光子的基本原理 光子是一門研究光和其他形式輻射能的學科。它涉及使用光學元件、激光、光纖和電子光學儀器來產生、操縱和檢測光。它
    的頭像 發表于 10-29 06:21 ?692次閱讀

    芯科技發布“芯P1”異構高能效芯片,引領AI PC新紀元

    近日,芯科技集團有限公司(簡稱“芯科技”)在上海隆重舉辦了AI PC戰略發布會,正式揭曉了其首款創新力作——“芯P1”異構高能效芯片。這一里程碑式的發布,標志著國產芯片在AI PC領域邁出了堅實的一步,為行業帶來了前所未有
    的頭像 發表于 08-01 17:42 ?1313次閱讀

    EtherCAT運動控制器上位機之Python+Qt(一):鏈接與單軸運動

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

    QT5+OpenCV4搭建應用開發環境

    作為深度學習算法工程師,必須要掌握應用開發技能嗎?搞工程肯定是必須要會界面開發,QT就是一個很不錯的選擇。本文以QT5.15 + OpenCV4.8 + OpenVINO2023為例,搭建應用開發環境,演示深度學習模型的QT應用
    的頭像 發表于 07-23 11:23 ?1476次閱讀
    <b class='flag-5'>QT</b>5+OpenCV4搭建應用開發環境
    主站蜘蛛池模板: 九色综合伊人久久富二代 | 51久久 | 夜夜摸夜夜操 | 免费人成年激情视频在线观看 | 欧美爽爽爽爽爽爽视频 | 国产精品夜夜春夜夜爽 | 免费福利午夜影视网 | 国产高清色播视频免费看 | 国产你懂的视频 | 亚洲精品久久久久久久蜜桃 | 免费的男女拍拍拍的视频 | 国产精品任我爽爆在线播放6080 | 四虎影在永久地址在线观看 | 日本色片在线观看 | 热re99久久精品国产99热 | 自拍偷拍欧美 | 欧美三级第一页 | 午夜免费啪视频 | 黄色在线网 | 爽爽爽爽爽爽a成人免费视频 | freesexvideo性欧美tv | 午夜视频在线观看一区二区 | 色吧久久 | 俄罗斯一级特黄黄大片 | 亚洲精品一线二线三线 | 婷婷网五月天天综合天天爱 | 91大神精品视频 | 婷婷色5月 | 亚洲一区中文 | 四虎精品永久在线网址 | 啪视频免费 | videosxxoo18在线| 欧美一区二区三区成人看不卡 | 97人人艹| 欧美.亚洲.日本一区二区三区 | 亚洲狠狠狠一区二区三区 | 牛仔裤美女国产精品毛片 | 国产亚洲精品aa在线观看 | 五月婷婷色网 | 狠狠色噜噜 | 亚洲成a人片在线看 |