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