• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 319, comments - 22, trackbacks - 0, articles - 11
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            和C#類似,Qt為類提供了可以“獲取”、“設(shè)置”的快捷方式——Property,目的都是為了:數(shù)據(jù)成員方式使用,(函數(shù)成員方式定義)。
            C#使用get、set方式,達(dá)到“數(shù)據(jù)成員方式定義”的屬性;
            Qt使用普通函數(shù)成員+Q_PROPERTY宏,完成屬性,及元數(shù)據(jù)(簡單說:就是運行時可以查看的有關(guān)類的信息)的加入;



            <*.h>
            ……
            Q_PROPERTY( type name READ getFunction [WRITE setFunction] [RESET resetFunction] [DESIGNABLE bool] [SCRIPTABLE bool] [STORED bool] )

            /*
            Q_PROPERTY宏:將信息注冊如元對象(QMetaObject),
            QMetaObject類:提供一系列方法,查詢、修改已經(jīng)注冊進的信息(如:屬性、枚舉、繼承關(guān)系、類名、信號、槽);
            QObject類就利用QMetaObject來查詢、修改屬性的,同時也是一種“運行期操作類屬性”的方法;
            name用于QObject獲取、設(shè)置屬性時使用;
            READ是必須的,不同與C#(C#可以僅定義只寫屬性);
            */

            public:
                    void setFunction(type);  
            // 參數(shù)(或下面get函數(shù)的返回值)的類型(type)可以是QVariant的繼承類,                                        
            //也可以是enum,但必須用Q_ENUMS(myenum……)注冊為元對象。

                    type getFunction() const;
                    void resetFunction();
            private:
                    type n;
            ……


            <*.cpp>
            ……
            void MyClass::setFunction(type name)
            {
                    n = name;
            }
            type MyClass::getFunction() const
            {
                    return n;
            }
            void MyClass::resetFunction()
            {
                    n = defaultName;
            }
            ……


            <使用方法>

            方法一:
            MyClass *mc =……;
            mc->setFunction(value);
            mc->getFunction();

            方法二:

            QObject *qo = ……;
            qo->setProperty("name",value);
            qo->getProperty("name");


            除了上面提到的,QT的元對象還提供了一些其他的東東:
            宏有:
            Q_OBJECT
            Q_PROPERTY
            Q_ENUMS
            Q_CLASSINFO
            Q_OVERRIDE

            tr()和trUtf8() 兩個函數(shù)是用于國際化中的字符串翻譯
            ______________________________________________________________________-

            定義格式如下:
            Q_PROPERTY(type name
                       READ getFunction
                       [WRITE setFunction]
                       [RESET resetFunction]
                       [DESIGNABLE bool]
                       [SCRIPTABLE bool]
                       [STORED bool])
            Q_PROPERTY() 是一個宏,用來在一個類中聲明一個屬性property,由于該宏是qt特有的,需要用moc進行編譯,故必須繼承于QObject類。在外界看 來,property跟類中數(shù)據(jù)成員沒有什么區(qū)別,但是還是有幾點不一樣,參考qt文檔,主要有以下幾點:
            1.必須有一個read函數(shù)。
            2.有一個可選的write函數(shù)。
            3.如果定義了"stored"屬性表明這是一直存在的。
            4.一個reset函數(shù)能夠把property設(shè)置成其默認(rèn)狀態(tài)
            5.一個"desinable"屬性表明該property能在GUI builder(一般為Qt Designer)可見

            然后對照這些,自己寫了一個例子

            class Test : public QObject
            {
              Q_OBJECT
              Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
            public:
              Test(QObject *parent = 0) : QObject(parent) {}  
              virtual ~Test(){}
              void setEnabled(bool e) { enabled = e; }
              bool isEnabled() const { return enabled; }

            private:
              bool enabled;
            };

            然后在主函數(shù)中
            Test *test = new Test;
            test->setProperty("enabled", true);
            //test->setEnabled(true);        //ok also work
            if(test->property("enabled").toBool())
            99久久做夜夜爱天天做精品| 成人免费网站久久久| 狠狠人妻久久久久久综合蜜桃 | 久久夜色精品国产亚洲| 无码人妻久久久一区二区三区| 久久久久女人精品毛片| 国内精品久久久久久久涩爱| 久久久亚洲欧洲日产国码是AV| 久久精品aⅴ无码中文字字幕重口 久久精品a亚洲国产v高清不卡 | 色欲综合久久躁天天躁蜜桃| 久久精品国产一区| 欧美亚洲国产精品久久久久| 久久96国产精品久久久| 亚洲国产成人久久一区久久| 国产精品对白刺激久久久| 亚洲欧美日韩精品久久亚洲区 | 亚洲国产成人久久综合碰碰动漫3d| 久久精品国产精品亜洲毛片| 国产精品9999久久久久| 亚洲乱码日产精品a级毛片久久 | 国产精品久久久久久久久久影院 | 精品久久久久久国产牛牛app | 亚洲精品无码久久一线| 亚洲а∨天堂久久精品| 精品久久久久久久久久中文字幕| 久久精品国产亚洲AV无码麻豆| 国产香蕉久久精品综合网| 国内精品伊人久久久久影院对白| 久久精品a亚洲国产v高清不卡| 中文无码久久精品| 一本色道久久88综合日韩精品 | 久久人人添人人爽添人人片牛牛| 久久久久免费精品国产| 国产精品久久久久无码av| 国产精品青草久久久久婷婷| 久久天天躁夜夜躁狠狠| 久久精品桃花综合| 亚洲国产成人精品无码久久久久久综合 | 精品一区二区久久| 国产成人精品久久免费动漫| AV无码久久久久不卡蜜桃|