• <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++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            1.導出Person類,并且一個Job類,Job類包含一個Person的指針

            2.具體導出過程

            1.通過屬性來實現,具體的請看代碼


            3.具體代碼



            // person.h
            #ifndef PERSON_H
            #define PERSON_H
            #include <QObject>
            #include <QColor>
            class Person : public QObject
            {
                Q_OBJECT
                // 設置設置屬性的名字是 name
                // 對應讀取函數名字 getName
                // 對應寫函數名字 setName
                // 屬性發生改變后發送信號 sendNameChange
                Q_PROPERTY(QString name READ getName WRITE setName NOTIFY sendNameChange)
               // 設置設置屬性的名字是 age
               // 對應讀取函數名字 getAge
               // 對應寫函數名字 setAge
               // 屬性發生改變后發送信號 sendAgeChange
               Q_PROPERTY(int age READ getAge WRITE setAge NOTIFY sendAgeChange)
            public:
                explicit Person(QObject *parent = 0);
                QString getName(void) const;
                void setName(const QString& name);
                int getAge(void);
                void setAge(int age);
            signals:
                void sendNameChange(void);
                void sendAgeChange(void);
            private:
                QString     m_Name;
                int         m_Age;
            };
            /*
             設想一份工作給予一個人
             */
            class Job : public QObject
            {
                Q_OBJECT
                Q_PROPERTY(Person *per READ getPerson WRITE setPerson NOTIFY sendPersonChange)
                Q_PROPERTY(QString jn READ getJobName WRITE setJobName NOTIFY sendJobNameChange)
            public:
                explicit Job(QObject *parent = 0);
                ~Job();
                void setPerson(Person *per);
                Person *getPerson(void) const;
                void setJobName(const QString & jobname);
                QString getJobName(void) const;
            signals:
                void sendPersonChange();
                void sendJobNameChange();
            private:
                Person *m_Person;
                QString m_JobName;
            };
            #endif // PERSON_H


            // person.cpp
            #include "person.h"
            //---------------------------------
            //
            Person::Person(QObject *parent) :
                QObject(parent), m_Name("unknow"), m_Age(0)
            {
            }
            //---------------------------------
            //
            QString Person::getName(void) const
            {
                return m_Name;
            }
            //---------------------------------
            //
            void Person::setName(const QString& name)
            {
                m_Name = name;
                emit sendNameChange();
            }
            //---------------------------------
            //
            int Person::getAge(void)
            {
                return m_Age;
            }
            //---------------------------------
            //
            void Person::setAge(int age)
            {
                m_Age = age;
                emit sendAgeChange();
            }
            //---------------------------------
            //
            Job::Job(QObject *parent)
                :QObject(parent), m_Person(0), m_JobName("unknown")
            {
            }
            //---------------------------------
            //
            Job::~Job()
            {
            }
            //---------------------------------
            //
            void Job::setPerson(Person *per)
            {
                m_Person = per;
                emit sendPersonChange();
            }
            //---------------------------------
            //
            Person *Job::getPerson(void) const
            {
                return m_Person;
            }
            //---------------------------------
            //
            void Job::setJobName(const QString & jobname)
            {
                m_JobName = jobname;
                emit sendJobNameChange();
            }
            //---------------------------------
            //
            QString Job::getJobName(void) const
            {
                return m_JobName;
            }


            // main.cpp
            #include <QtGui/QApplication>
            #include <QtDeclarative/QDeclarativeView>
            #include <QtDeclarative/QDeclarativeEngine>
            #include <QtDeclarative/QDeclarativeComponent>
            #include "person.h"
            int main(int argc, char *argv[])
            {
                QApplication a(argc, argv);
                qmlRegisterType<Person>("People",1,0,"Person");
                //qmlRegisterType<Person>();
                qmlRegisterType<Job>("People",1,0,"Job");
                QDeclarativeView qmlView;
                qmlView.setSource(QUrl::fromLocalFile("../UICtest/UICtest.qml"));
                qmlView.show();
                return a.exec();
            }


            // UICtest.qml
            import Qt 4.7
            import People 1.0 //如果是qmlRegisterType<Person>(); 導出就可以注釋這條
            Rectangle {
                width: 640
                height: 480
                Job {
                    id: jobA;
                    jn: "Learn";
                    per: Person { id: ps; name: "Luly"; age: 25; }
                }
                // 顯示這份工作的一些信息
                Rectangle{
                    x: 100; y: 100;
                    width: 100; height: 100;
                    Text { text: "Job name:" + jobA.jn; }
                    Text { y: 20; text: "Person name:" + ps.name; }
                    Text { y: 40; text: "Person age:"  + ps.age; }
                }
                MouseArea{
                    anchors.fill: parent;
                    onClicked:{
                        // 我要改變工作的名字 工作人的信息
                        jobA.jn = "Clean House";
                        ps.name = "Tom";
                        ps.age = 30;
                    }
                }
            }


            說明:

            主要是導出了兩個類PersonJob, Job 包含一個Person的指針,這樣后,可以看到

            QML中,我們需要給予Job對象一個Person來盡心賦值。


            91精品国产9l久久久久| 亚洲欧洲精品成人久久曰影片 | 亚洲AV无码久久| 久久综合综合久久综合| 91麻精品国产91久久久久| 久久九色综合九色99伊人| 亚洲中文字幕无码久久综合网| 精品国产福利久久久| 麻豆久久| 久久中文字幕一区二区| 欧美色综合久久久久久| 国产精品青草久久久久婷婷| 国产精品久久婷婷六月丁香| 蜜桃麻豆www久久| 人妻精品久久无码专区精东影业| 伊人久久大香线蕉精品| 亚洲精品乱码久久久久久蜜桃不卡| 人人狠狠综合久久亚洲婷婷| 日韩精品无码久久久久久| 久久久久女教师免费一区| 久久青青草原精品影院| 国内精品久久人妻互换| 久久亚洲中文字幕精品有坂深雪| 天天做夜夜做久久做狠狠| 国产精品成人99久久久久| 久久免费高清视频| 久久ZYZ资源站无码中文动漫 | 成人久久精品一区二区三区| 亚洲成色www久久网站夜月| 精品久久久久久久国产潘金莲 | 久久亚洲sm情趣捆绑调教 | 国产精品无码久久综合 | 久久久久久午夜成人影院| 久久无码中文字幕东京热| 久久亚洲精品无码VA大香大香| 亚洲国产精品无码久久九九| 国产日韩久久免费影院| 久久99精品久久久久久噜噜| 国产精品成人99久久久久91gav| 99精品久久久久久久婷婷| 精品无码久久久久久国产|