色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    4779

    瀏覽量

    68525
  • Qt
    Qt
    +關注

    關注

    1

    文章

    302

    瀏覽量

    37899
  • 矩形
    +關注

    關注

    0

    文章

    15

    瀏覽量

    12598

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

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

收藏 人收藏

    評論

    相關推薦

    馳AI辦公本Turbo重磅發布

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

    QT5+OpenCV4搭建應用開發環境

    作為深度學習算法工程師,必須要掌握應用開發技能嗎?搞工程肯定是必須要會界面開發,QT就是一個很不錯的選擇。本文以QT5.15 + OpenCV4.8 + OpenVINO2023為例,搭建應用開發環境,演示深度學習模型的QT應用
    的頭像 發表于 07-23 11:23 ?1070次閱讀
    <b class='flag-5'>QT</b>5+OpenCV4搭建應用開發環境

    基線算所需的起算點應按何種順序采用

    在地理信息系統(GIS)和大地測量中,基線算是一個關鍵的步驟,用于確定空間對象的精確位置。基線算通常涉及到多個起算點,這些起算點的選取和排序對于算的準確性和效率至關重要。本文將
    的頭像 發表于 07-11 15:11 ?299次閱讀

    米爾NXP i.MX 93開發板的Qt開發指南

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

    在嵌入式系統中集成Rust和Qt的實踐

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

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

    易微砥礪奮進,再添新翼! 近日,易微青島辦事處正式成立,是易微在華東區域的又一重要戰略布局。 青島作為國家打造“一帶一路”國際合作新平臺的重點城市,將集成電路產業放在新興產業發展重要位置,匯集
    的頭像 發表于 04-14 10:34 ?422次閱讀

    Qt上位機開發實戰案例

    Qt Creator是一個用于Qt開發的輕量級跨平臺集成開發環境。 Qt Creator可帶來兩大關鍵益處: 提供首個專為支持跨平臺開發而設計的集成開發環境 (IDE),并確保首次接觸
    的頭像 發表于 03-13 12:31 ?2469次閱讀
    <b class='flag-5'>Qt</b>上位機開發實戰案例

    3562-Qt工程編譯說明

    本文檔主要說明如何將已有 Qt 工程進行編譯,生成可在評估板上正常運行的 ARM 端 Qt 程序鏡像。 Qt 開發環境主要包括 Qt Creator 工具、X86 端
    的頭像 發表于 03-05 09:19 ?465次閱讀
    3562-<b class='flag-5'>Qt</b>工程編譯說明

    QT開發學習筆記1(安裝交叉編譯器)

    QT安裝交叉編譯器
    的頭像 發表于 02-18 10:02 ?926次閱讀
    <b class='flag-5'>QT</b>開發學習筆記1(安裝交叉編譯器)

    Qt For OpenHarmony圖形化的進展突破

    Qt 適配 OpenHarmony 意義 Qt 是一個 C++ 跨平臺開發框架,主要用于開發圖形用戶界面(Graphical User Interface,GUI)程序,具有跨平臺類庫(支持目前
    的頭像 發表于 02-02 14:29 ?1486次閱讀
    <b class='flag-5'>Qt</b> For OpenHarmony圖形化的進展突破

    基于QT5+OpenCV+OpenVINO C++的應用打包過程

    我用QT C++寫了一個YOLOv5模型推理演示應用。
    的頭像 發表于 01-26 10:17 ?1230次閱讀
    基于<b class='flag-5'>QT</b>5+OpenCV+OpenVINO C++的應用打包過程

    TLT507-Qt工程編譯說明

    TLT507-Qt工程編譯說明
    的頭像 發表于 01-26 09:37 ?1105次閱讀
    TLT507-<b class='flag-5'>Qt</b>工程編譯說明

    TL3588-Qt工程編譯、GPU核心使用說明

    TL3588-Qt工程編譯、GPU核心使用說明
    的頭像 發表于 01-24 14:03 ?915次閱讀
    TL3588-<b class='flag-5'>Qt</b>工程編譯、GPU核心使用說明

    QT串口通信的簡單使用

    QT串口通信是上位機和下位機通信常用的通信方式, 也是學習QT必須學會的基礎知識, 這篇就簡單介紹一下QT串口通信的簡單使用.
    的頭像 發表于 01-15 09:27 ?1972次閱讀
    <b class='flag-5'>QT</b>串口通信的簡單使用

    全志T113開發板Qt遠程調試

    通常情況下工程師在調試Qt程序時,需要頻繁制作鏡像燒錄到核心板來測試Qt程序是否完善,這樣的操作既費時又費力。
    的頭像 發表于 01-10 17:48 ?2696次閱讀
    全志T113開發板<b class='flag-5'>Qt</b>遠程調試
    主站蜘蛛池模板: 国产精品色午夜视频免费看| 阿娇和冠希13分钟在线观看| 在线亚洲精品福利网址导航| 最新无码二区日本专区| 97免费在线视频| 被肉日常np快穿高h| 国产精品伦理一二三区伦理| 国产色精品VR一区二区| 精品视频在线一区| 男人扒开添女人屁股| 日本人六九视频| 亚洲精品无码国产爽快A片百度| 伊人亚洲综合青草青草久热| 91久久夜色精品| 高h原耽肉汁动漫视频| 果冻传媒在线完整免费播放| 就去色一色| 日韩一区二区三区视频在线观看 | 久久99AV无色码人妻蜜柚| 伦理电影v男人天堂| 日韩在线视频www色| 亚洲欧美中文字幕高清在线| 5580免费午夜福利院| 国产成人 免费观看| 久久国产精品萌白酱免费| 青青草原国产在线| 亚洲精品国产国语| 99久视频只有精品2019| 国产精品一久久香蕉国产线看| 久久精品九九亚洲精品天堂| 千禧金瓶梅 快播| 亚洲日韩中文字幕区| MELODY在线播放无删减| 国产在线观看成人免费视频| 久久在精品线影院精品国产| 日韩精品a在线视频| 在线日本高清日本免费| 国产99对白在线播放| 美国z0069| 小伙无套内射老女人| 99久久国语露脸精品国产|