導航:首頁 > 源碼編譯 > 為什麼qt編譯會生成moc文件

為什麼qt編譯會生成moc文件

發布時間:2022-12-11 10:16:41

1. moc文件是什麼在哪可以找到有什麼作用....

QT中的moc?
moc是QT的預編譯器,用來處理代碼中的slot,signal,emit,Q_OBJECT等。
moc文件是對應的處理代碼,也就是Q_OBJECT宏的實現部分,在官方文檔上有詳細說明,與其文件在同一目錄下。

2. QT信號槽實現原理

先放一個簡單的信號槽的實現,如下:
mainwindow.h

mainwindow.cpp

由於頭文件中有 Q_OBJECT ,則在編譯後會生成一個moc_mainwindow.cpp文件,該文件由moc生成。

先看下 Q_OBJECT 宏的定義

用於不同的 class 返回自己的 staticMetaObject。如果QObject實例的metaObject 不為空,則調用 QObjectData::dynamicMetaObject() ,否則返回自己的staticMetaObject地址。

根據傳入的類名,返回對應的實例。

在每一個QMetaObject對象中,槽、信號以及其它的對象可調用函數都會分配一個從0開始的索引。索引是有順序的,信號在第一位,槽在第二位,最後是其它函數。這個索引在內部被稱為相對索引,不包含父對象的索引位。為了實現包含在繼承鏈中其它函數的索引,在相對索引的基礎上添加一個偏移量,得到絕對索引。絕對索引是在公開API中使用的索引,由QMetaObject::indexOf(Signal, Slot, Method) 類似的函數返回。
多個信號槽對,會依次遞增序號比如:

根據Id處理。當信號發射時,QT會掉用qt_metacall,並把QMetaObject::Call設置為QMetaObject::InvokeMetaMethod。該函數同樣處理屬性系統,根據傳入的不同的QMetaObject::Call來處理。
第二個參數是一個索引,用於唯一標識當前對象繼承的類的層次結構中的信號或槽。最後一個參數是一個數組,其中包含指向參數的指針,其後是指向應放置返回值的位置(如果有)的指針,對於信號槽機制,代表則傳入的參數列表。

3. qt 有些源碼後面 為什麼 會添加一個 include "moc

moc_文件是自動生成的啊。
你帶上頭文件OBJECT這個關鍵字之後, 就會自動幫你生成,把你的slots或者signal之類的統統生成一個MOC文件。。嗯,應該是的

4. qt.ui 文件.ui文件是怎麼生成相應的.h文件的

el moro been ope!" it was thal

閱讀全文

與為什麼qt編譯會生成moc文件相關的資料

熱點內容
安卓手機拍照為什麼總是抖動 瀏覽:250
汽車車載app如何下載 瀏覽:24
python復合型數據類型 瀏覽:375
登錄伺服器發生錯誤怎麼回事 瀏覽:272
松下空氣能壓縮機 瀏覽:938
萬能源碼播放器 瀏覽:968
串口伺服器如何轉發 瀏覽:359
如何下載Ck電影部app 瀏覽:744
解壓文具筆袋簡單 瀏覽:288
android百度坐標轉換 瀏覽:367
文件公私鑰加密傳輸 瀏覽:665
python矩陣維度 瀏覽:927
華佗舌診源碼 瀏覽:897
解壓壓縮包有一個錯誤怎麼辦 瀏覽:966
怎麼在手機上設立文件夾 瀏覽:232
雲幫手伺服器搭建教程 瀏覽:785
惠普默認存在哪個文件夾 瀏覽:493
建立桌面圖標文件夾 瀏覽:86
python怎麼跳過異常繼續執行 瀏覽:315
單片機驅動可控硅 瀏覽:294