導航:首頁 > 源碼編譯 > 為什麼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文件相關的資料

熱點內容
進入組策略的命令 瀏覽:137
python數據結構和內存 瀏覽:25
python軟體功能簡介 瀏覽:784
外國程序員一般多少歲退休 瀏覽:917
怎麼看linux和時間伺服器 瀏覽:680
程序員搞笑花名 瀏覽:501
dota2怎麼設置國服伺服器地址 瀏覽:212
單片機高電平驅動 瀏覽:115
ios多選文件夾 瀏覽:909
加強行車調度命令管理 瀏覽:243
伺服器已禁用什麼意思 瀏覽:150
部隊命令回復 瀏覽:755
神奇寶貝伺服器地圖怎麼設置 瀏覽:382
加密演算法輸出固定長度 瀏覽:862
程序員去重慶還是武漢 瀏覽:121
伺服器如何撤銷網頁登錄限制 瀏覽:980
微信公眾平台php開發視頻教程 瀏覽:628
怎麼看蘋果授權綁定的app 瀏覽:255
壓縮機單級壓縮比 瀏覽:380
linux測試php 瀏覽:971