2011-05-03 43 views
1

此鏈接:http://doc.trolltech.com/4.5/moc.html#mocQ_OBJECT宏和元對象代碼

交通部工具讀取一個C++頭文件。 如果它發現一個或多個包含Q_OBJECT 宏的類 聲明,它會生成包含這些類的元對象代碼 的C++源文件 。

什麼是對象代碼?

編輯1

如何知道在哪個班,我應該寫Q_OBJECT?一個例子是信號和插槽,需要使用的其他任何情況?

回答

2

元對象通過創建新的或操縱現有對象來增強編程語言。它們提供語言實際上並不具有的功能。元對象可以通過編譯時或運行時解釋。在Qt和C++中,它是在編譯期間由Meta Object Compiler(moc)完成的。

一個例子是信號/插槽概念的用法。

+0

感謝您的回答。請在Donotalo的帖子中看到我的評論。 – 2011-05-03 07:36:10

+1

知道事情如何運作總是很好的。程序員不關心他們的代碼下面發生了什麼,他們是更糟糕的程序員。但是,是的,MOC允許您使用功能,而無需自己實施它們,因此您可以集中精力正確使用它們,而不是先讓它們工作。 – Exa 2011-05-03 07:42:28

4

您可以閱讀文章Qt internals and Reversing以深入瞭解Qt及其moc編譯器(meta objet編譯器)。總之,一個元對象是由Qt的moc編譯器創建的,爲信號/插槽機制等類添加額外信息。

+0

感謝您的鏈接,我會讀。但我只想要2或3行解釋「元對象」的含義。 – 2011-05-03 07:33:51

1

Qt環境中的元對象代碼是一個C++源文件,它是C++源代碼的擴展版本文件,你已經把Q_OBJECT(和/或其他相關的宏)。元對象代碼將實現您的實現以及一些其他額外(元)代碼,以便信號和插槽機制起作用。

+0

這是否意味着,這不關我的事,我不應該打擾Q_OBJECT的工作方式? – 2011-05-03 07:35:00

+0

@anisha,如果你很好奇,當然你可以深入挖掘。但是您可以學習和使用Qt,而不必擔心Q_OBJECT如何工作。但是,您需要了解何時以及爲什麼要使用Q_OBJECT。 – Donotalo 2011-05-03 07:41:27

+0

原則上,是的。但是如果你想使用「invokeMethod」,理解QObject和QMetaObject的基礎知識會很有幫助。 – hmuelner 2011-05-03 07:42:24

1

元對象包含有關對象的元信息,如名稱和其信號和插槽的文本描述。這可以通過「名稱」呼叫信號。請參閱有關QMetaObjectarticle的文檔。