• <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來盡心賦值。


            久久综合亚洲色HEZYO国产| 婷婷久久综合九色综合九七| 一本久久a久久精品vr综合| 久久99久国产麻精品66| 99久久人妻无码精品系列蜜桃| 久久亚洲国产欧洲精品一| 蜜臀久久99精品久久久久久| 久久精品国产免费观看三人同眠| 97久久精品人妻人人搡人人玩| 91久久精品视频| 午夜久久久久久禁播电影| 久久精品成人免费国产片小草| 国产亚洲精久久久久久无码77777| 91精品国产乱码久久久久久| 久久亚洲国产成人精品无码区| 亚洲乱码中文字幕久久孕妇黑人| 人人狠狠综合久久亚洲88| 亚洲狠狠婷婷综合久久蜜芽| 久久久国产精品| 欧洲精品久久久av无码电影| 亚洲国产日韩欧美综合久久| 91精品国产91久久| 久久精品人人做人人爽97| 超级碰碰碰碰97久久久久| 久久久精品一区二区三区| 午夜人妻久久久久久久久| 久久久国产视频| 色悠久久久久久久综合网| 日本久久久精品中文字幕| 97久久综合精品久久久综合| 久久精品成人欧美大片| 久久91精品国产91| 亚洲精品国产自在久久| 久久影院午夜理论片无码| 久久久久免费视频| 国产精品久久久久乳精品爆| 97精品伊人久久久大香线蕉| 99久久99久久精品国产片果冻 | 久久天天婷婷五月俺也去| 香蕉aa三级久久毛片| 色综合久久88色综合天天 |