亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? moc.html

?? Linux下Qt編程的電子書
?? HTML
?? 第 1 頁 / 共 2 頁
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- /home/reggie/tmp/qt-3.0-reggie-5401/qt-win-commercial-3.0.5/doc/moc.doc:39 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Translator" content="Cavendish">
<meta name="Qt zh_CN Documents Website" content="http://www.qiliang.net/qt">
<title>使用元對象編譯器</title>
<style type="text/css"><!--
h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }
a:link { color: #004faf; text-decoration: none }
a:visited { color: #672967; text-decoration: none }
body { background: #ffffff; color: black; font-family: "Times New Roman" }
--></style>
</head>
<body>

<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr bgcolor="#E5E5E5">
<td valign=center>
 <a href="index.html">
<font color="#004faf">主頁</font></a>
 | <a href="classes.html">
<font color="#004faf">所有的類</font></a>
 | <a href="mainclasses.html">
<font color="#004faf">主要的類</font></a>
 | <a href="annotated.html">
<font color="#004faf">注釋的類</font></a>
 | <a href="groups.html">
<font color="#004faf">分組的類</font></a>
 | <a href="functions.html">
<font color="#004faf">函數(shù)</font></a>
</td>
<td align="right" valign="center"><img src="logo32.png" align="right" width="64" height="32" border="0"></td></tr></table>
<h1 align=center>使用元對象編譯器</h1>

 
<p> <!-- index moc --><a name="moc"></a>
<p> 元對象編譯器,朋友中的moc,是處理Qt的<a href="metaobjects.html">C++擴展</a>的程序。
<p> 元對象編譯器讀取一個C++源文件。如果它發(fā)現(xiàn)其中的一個或多個類的聲明中含有<a href="metaobjects.html#Q_OBJECT">Q_OBJECT</a>宏,它就會給這個使用Q_OBJECT宏的類生成另外一個包含<a href="metaobjects.html#meta-object">元對象</a>代碼的C++源文件。尤其是,元對象代碼對信號/槽機制、運行時類型信息和動態(tài)屬性系統(tǒng)是需要的。
<p> 一個被元對象編譯器生成的C++源文件必須和這個類的實現(xiàn)一起被編譯和連接(或者它被包含到(#include)這個類的源文件中)。
<p> 如果你是用<a href="qmake-manual.html">qmake</a>來生成你的Makefile文件,當需要的時候,編譯規(guī)則中需要包含調(diào)用元對象編譯器,所以你不需要直接使用元對象編譯器。關于元對象編譯器的更多的背景知識,請看<a href="templates.html">為什么Qt不用模板來實現(xiàn)信號和槽?</a>。
<p> <h2> 用法
</h2>
<a name="1"></a><p> 元對象編譯器很典型地和包含下面這樣情況地類聲明地輸入文件一起使用:
<p> <pre>
    class MyClass : public <a href="qobject.html">QObject</a>
    {
        Q_OBJECT
    public:
        MyClass( <a href="qobject.html">QObject</a> * parent=0, const char * name=0 );
        ~MyClass();

    signals:
        void mySignal();

    public slots:
        void mySlot();

    };
</pre>
 
<p> 除了上述提到地信號和槽,元對象編譯器在下一個例子中還將實現(xiàn)對象屬性。Q_PROPERTY宏聲明了一個對象屬性,而Q_ENUMS 聲明在這個類中的<a href="properties.html">屬性系統(tǒng)</a>中可用的枚舉類型的一個列表。在這種特殊的情況下,我們聲明了一個枚舉類型屬性<tt>Priority</tt>,也被稱為“priority”,并且讀函數(shù)為<tt>priority()</tt>,寫函數(shù)為<tt>setPriority()</tt>。
<p> <pre>
    class MyClass : public <a href="qobject.html">QObject</a>
    {
        Q_OBJECT
        Q_PROPERTY( Priority priority READ priority WRITE setPriority )
        Q_ENUMS( Priority )
    public:
        MyClass( <a href="qobject.html">QObject</a> * parent=0, const char * name=0 );
        ~MyClass();

        enum Priority { High, Low, VeryHigh, VeryLow };
        void setPriority( Priority );
        Priority priority() const;
    };
</pre>
 
<p> 屬性可以通過Q_OVERRIDE宏在子類中進行修改。Q_SETS宏聲明了枚舉變量可以進行組合操作,也就是說可以一起讀或?qū)?。另外一個宏,Q_CLASSINFO,用來給類的元對象添加名稱/值這樣一組數(shù)據(jù):
<p> <pre>
    class MyClass : public <a href="qobject.html">QObject</a>
    {
        Q_OBJECT
        Q_CLASSINFO( "Author", "Oscar Peterson")
        Q_CLASSINFO( "Status", "Very nice class")
    public:
        MyClass( <a href="qobject.html">QObject</a> * parent=0, const char * name=0 );
        ~MyClass();
    };
</pre>
 
<p> 這三個概念:信號和槽、屬性和元對象數(shù)據(jù)是可以組合在一起的。
<p> 元對象編譯器生成的輸出文件必須被編譯和連接,就像你的程序中的其它的C++代碼一樣;否則你的程序的連編將會在最后的連接階段失敗。出于習慣,這種操作是用下述兩種方式之一解決的:
<p> <dl>
<p> <dt><b>方法一:類的聲明放在一個頭文件(<em>.h文件</em>)中</b>
<p> <dd>如果在上述的文件<em>myclass.h</em>中發(fā)現(xiàn)類的聲明,元對象編譯器的輸出文件將會被放在一個叫<em>moc_myclass.cpp</em>的文件中。這個文件將會像通常情況一樣被編譯,作為對象文件的結(jié)果是<em>moc_myclass.o</em>(在Unix下)或者<em>moc_myclass.obj</em>(在Windows下)。這個對象接著將會被包含到一個對象文件列表中,它們將會在程序的最后連編階段被連接在一起。
<p> <dt><b>方法二:類的聲明放在一個實現(xiàn)文件(<em>.cpp文件</em>)中</b>
<p> <dd>如果上述的文件<em>myclass.cpp</em>中發(fā)現(xiàn)類的聲明,元對象編譯器的輸出文件將會被放在一個叫<em>myclass.moc</em>的文件中。這個文件需要被實現(xiàn)文件包含(#include),也就是說<em>myclass.cpp</em>需要包含下面這行
<pre>
    #include "myclass.moc"
</pre>
 
放在所有的代碼之后。這樣,元對象編譯器生成的代碼將會和<em>myclass.cpp</em>中普通的類定義一起被編譯和連接,所以方法一中的分別編譯和連接就是不需要的了。
<p> </dl>
方法一是常規(guī)的方法。方法二用在你想讓實現(xiàn)文件自包含,或者Q_OBJECT類是內(nèi)部實現(xiàn)的并且在頭文件中不可見的這些情況下使用。
<p> <h2> Makefile中自動使用元對象編譯器的方法
</h2>
<a name="2"></a><p> 除了最簡單的測試程序之外的任何程序,建議自動使用元對象編譯器。在你的程序的Makefile文件中加入一些規(guī)則,<em>make</em>就會在需要的時候運行元對象編譯器和處理元對象編譯器的輸出。
<p> 我們建議使用Trolltech的自由makefile生成工具,<a href="qmake-manual.html">qmake</a>,來生成你的Makefile。這個工具可以識別方法一和方法二風格的源文件,并建立一個可以做所有必要的元對象編譯操作的Makefile。
<p> 另一方面如果,你想自己建立你的Makefile,下面是如何包含元對象編譯操作的一些提示。
<p> 對于在頭文件中聲明了Q_OBJECT宏的類,如果你只使用GNU的make的話,這是一個很有用的makefile規(guī)則:
<p> <pre>
    moc_%.cpp: %.h
            moc $&lt; -o $@
</pre>
 
<p> 如果你想更方便地寫makefile,你可以按下面的格式寫單獨的規(guī)則:
<p> <pre>
    moc_NAME.cpp: NAME.h
            moc $&lt; -o $@
</pre>
 
<p> 你必須記住要把<em>moc_NAME.cpp</em>添加到你的SOURCES(你可以用你喜歡的名字替代)變量中并且把<em>moc_NAME.o</em>或者<em>moc_NAME.obj</em>添加到你的OBJECTS變量中。
<p> (當我們給我們的C++源文件命名為.cpp時,元對象編譯器并不留意,所以只要你喜歡,你可以使用.C、.cc、.CC、.cxx或者甚至.c++。)
<p> 對于在實現(xiàn)文件(.cpp文件)中聲明Q_OBJECT的類,我們建議你使用下面這樣的makefile規(guī)則:
<p> <pre>
    NAME.o: NAME.moc

    NAME.moc: NAME.cpp
            moc -i $&lt; -o $@
</pre>
 
<p> 這將會保證make程序會在編譯<em>NAME.cpp</em>之前運行元對象編譯器。然后你可以把
<p> <pre>
    #include "NAME.moc"
</pre>
 
<p> 放在<em>NAME.cpp</em>的末尾,這樣在這個文件中的所有的類聲明被完全地知道。
<p> <h2> 調(diào)用元對象編譯器moc
</h2>
<a name="3"></a><p> 這里是元對象編譯器moc所支持地命令行選項:
<p> <dl>
<dt> -o <em>file</em> <dd> 將輸出寫到<em>file</em>而不是標準輸出。
<dt> -f <dd> 強制在輸出文件中生成#include聲明。文件的名稱必須符合<a href="qregexp.html#regular-expression">正則表達式</a>&#92;.[hH][^.]*(也就是說擴展名必須以H或h開始)。這個選項只有在你的頭文件沒有遵循標準命名法則的時候才有用。
<dt> -i <dd> 不在輸出文件中生成#include聲明。當一個C++文件包含一個或多個類聲明的時候你也許應該這樣使用元對象編譯器。然后你應該在.cpp文件中包含(#include)元對象代碼。如果-i和-f兩個參數(shù)都出現(xiàn),后出現(xiàn)的有效。
<dt> -nw <dd> 不產(chǎn)生任何警告。不建議使用。
<dt> -ldbg <dd> 把大量的lex調(diào)試信息寫到標準輸出。
<dt> -p <em>path</em> <dd> 使元對象編譯器生成的(如果有生成的)#include聲明的文件名稱中預先考慮到<em>path</em>/。
<dt> -q <em>path</em> <dd> 使元對象編譯器在生成的文件中的qt #include文件的名稱中預先考慮到<em>path</em>/。
</dl>
<p> 你可以明確地告訴元對象編譯器不要解析頭文件中的成分。它可以識別包含子字符串MOC_SKIP_BEGIN或者MOC_SKIP_END的任何C++注釋(//)。它們正如你所期望的那樣工作并且你可以把它們劃分為若干層次。元對象編譯器所看到的最終結(jié)果就好像你把一個MOC_SKIP_BEGIN和一個MOC_SKIP_END當中的所有行刪除那樣。
<p> <h2> 診斷
</h2>
<a name="4"></a><p> 元對象編譯器將會警告關于學多在Q_OBJECT類聲明中危險的或者不合法的構(gòu)造。
<p> 如果你在你的程序的最后連編階段得到連接錯誤,說YourClass::className()是未定義的或者YourClass缺乏vtbl,某樣東西已經(jīng)被做錯。絕大多數(shù)情況下,你忘記了編譯或者#include元對象編譯器產(chǎn)生的C++代碼,或者(在前面的情況下)沒有在連接命令中包含那個對象文件。
<p> <h2> 限制
</h2>
<a name="5"></a><p> 元對象編譯器并不展開#include或者#define,它簡單地忽略它所遇到的所有預處理程序指示。這是遺憾的,但是在實踐中它通常情況下不是問題。
<p> 元對象編譯器不處理所有的C++。主要的問題是類模板不能含有信號和槽。這里是一個例子:
<p> <pre>
    class SomeTemplate&lt;int&gt; : public <a href="qframe.html">QFrame</a> {
        Q_OBJECT
        ...
    signals:
        void bugInMocDetected( int );
    };

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产免费一区二区三区四区| 国产成人精品aa毛片| 在线观看成人免费视频| 一区二区三区在线影院| 91激情五月电影| 天天综合色天天综合| 欧美r级电影在线观看| 国产毛片精品一区| 国产精品久久久久久久浪潮网站 | av一二三不卡影片| 亚洲精品一卡二卡| 欧美一区二区视频观看视频| 六月婷婷色综合| 国产精品国产精品国产专区不蜜| 色综合色狠狠综合色| 日韩不卡在线观看日韩不卡视频| 欧美精品一区二区久久婷婷| av成人动漫在线观看| 亚洲高清免费观看| 久久精品一区八戒影视| 色94色欧美sute亚洲线路一久| 日韩精品一二三| 日本一区二区三区国色天香| 色av综合在线| 国产麻豆9l精品三级站| 亚洲黄色在线视频| 欧美精品一区二区在线播放| 99久久99久久精品免费观看| 免费在线看一区| 国产精品成人免费在线| 欧美一区二区在线播放| 97se狠狠狠综合亚洲狠狠| 日本在线播放一区二区三区| 一区在线播放视频| 日韩无一区二区| 91丨九色丨国产丨porny| 蜜桃视频第一区免费观看| 亚洲日本免费电影| 久久色在线观看| 91 com成人网| 一本久久a久久免费精品不卡| 老色鬼精品视频在线观看播放| 成人欧美一区二区三区在线播放| 欧美电影免费观看高清完整版在| 色丁香久综合在线久综合在线观看| 久久精品国产网站| 日韩影院在线观看| 一区二区三区小说| 国产精品久久久久久久久久久免费看 | 国产精品欧美一级免费| 精品免费日韩av| 在线播放亚洲一区| 色吊一区二区三区| 91影院在线观看| 国产suv一区二区三区88区| 麻豆91精品视频| 午夜亚洲福利老司机| 一区二区三区精品视频| 国产精品网友自拍| 国产日韩欧美精品在线| 欧美mv和日韩mv国产网站| 欧美日韩高清一区| 欧美日韩精品一区二区| 色呦呦国产精品| 成人免费高清视频在线观看| 国产精品18久久久久久久久久久久 | 日本中文在线一区| 天天综合网 天天综合色| 亚洲va韩国va欧美va| 亚洲一区二区在线观看视频| 亚洲综合丝袜美腿| 亚洲激情六月丁香| 一区二区三区免费在线观看| 亚洲色图一区二区| 亚洲男人天堂av| 一区二区免费视频| 亚洲成人午夜电影| 日韩主播视频在线| 香港成人在线视频| 免费在线看一区| 久久99精品国产.久久久久| 久久精品国产精品青草| 国产一区二区久久| 北岛玲一区二区三区四区| 成人黄页毛片网站| 日本久久一区二区| 欧美日韩在线播放一区| 欧美群妇大交群的观看方式| 日韩一区二区三区视频| 亚洲精品一区二区三区香蕉| 亚洲国产精品传媒在线观看| 国产精品国产三级国产专播品爱网 | 成人h动漫精品一区二区| 成人激情动漫在线观看| 在线看一区二区| 欧美高清激情brazzers| 精品国内二区三区| 国产精品日日摸夜夜摸av| 亚洲免费观看高清完整版在线观看| 一区二区三区在线播| 青青草一区二区三区| 国产精品中文有码| 91久久奴性调教| 日韩欧美色电影| 国产精品视频一二三| 亚洲综合男人的天堂| 麻豆成人免费电影| 成av人片一区二区| 欧美精品粉嫩高潮一区二区| 国产欧美精品一区二区色综合| 1000精品久久久久久久久| 日韩国产高清影视| 成人免费毛片片v| 欧美高清www午色夜在线视频| 久久久久久免费网| 亚洲资源中文字幕| 国产精品资源网| 欧美日韩精品欧美日韩精品一| 久久亚洲精品小早川怜子| 亚洲自拍偷拍欧美| 国产精品白丝av| 欧美电影在哪看比较好| 国产精品色在线| 另类的小说在线视频另类成人小视频在线 | hitomi一区二区三区精品| 欧美日韩一区二区三区在线看| 久久免费电影网| 天堂av在线一区| 91小宝寻花一区二区三区| 精品国产第一区二区三区观看体验| 中文字幕亚洲区| 国产自产2019最新不卡| 8v天堂国产在线一区二区| 亚洲激情图片qvod| 成人h精品动漫一区二区三区| 日韩欧美不卡一区| 亚洲一区二区三区美女| 91在线精品秘密一区二区| 精品免费一区二区三区| 日韩在线一区二区三区| 欧美一a一片一级一片| 国产精品美女久久久久久久网站| 日韩国产在线观看一区| 色综合久久久久久久久| 欧美国产一区二区在线观看| 精品亚洲欧美一区| 欧美日韩一级二级三级| 一区二区成人在线视频| 99视频精品免费视频| 久久精品男人天堂av| 九九国产精品视频| 欧美一区二区三区在线观看视频| 亚洲午夜在线电影| 欧美影院精品一区| 一区二区三区欧美| 欧美中文字幕亚洲一区二区va在线 | 亚洲天堂精品视频| 成人激情免费视频| 国产精品国产自产拍高清av| 成人美女视频在线观看| 久久精品一区二区三区四区 | 国产成人免费xxxxxxxx| 久久久蜜桃精品| 极品销魂美女一区二区三区| 精品精品国产高清一毛片一天堂| 日本sm残虐另类| 日韩精品专区在线| 国内精品伊人久久久久av一坑 | 亚洲精品欧美激情| 色94色欧美sute亚洲线路一ni| 亚洲欧美日韩国产手机在线| 91视频91自| 亚洲国产日韩a在线播放| 欧美日韩专区在线| 日韩 欧美一区二区三区| 日韩免费一区二区三区在线播放| 免费久久99精品国产| 精品剧情在线观看| 国产成人在线免费| 亚洲色图视频网| 欧美精品乱码久久久久久按摩| 琪琪一区二区三区| 国产色综合久久| 91色在线porny| 亚洲国产日韩精品| 精品999久久久| av成人免费在线观看| 亚洲成人午夜影院| 欧美成人高清电影在线| 国产suv精品一区二区883| 伊人色综合久久天天人手人婷| 在线看日本不卡| 韩国精品免费视频| 亚洲免费观看视频| 欧美成人一级视频| 97精品国产97久久久久久久久久久久 | 成人高清伦理免费影院在线观看| 亚洲欧美电影一区二区| 91精品国产一区二区三区 | 亚洲国产成人精品视频|