• <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精品综合国产首页| 国内精品九九久久精品 | 国产69精品久久久久777| 精品久久人人做人人爽综合| 久久婷婷午色综合夜啪| 国产精品岛国久久久久| 久久国产成人| 久久精品国产99国产精偷| 亚洲国产日韩欧美久久| 久久这里只有精品首页| 人妻少妇久久中文字幕一区二区| 国内精品久久久久久久涩爱| 欧美日韩精品久久久免费观看| 国产∨亚洲V天堂无码久久久| 久久天天躁狠狠躁夜夜av浪潮| 久久精品无码专区免费青青| 久久精品国产男包| 色婷婷久久综合中文久久一本| 91精品国产综合久久四虎久久无码一级| 久久亚洲精品国产亚洲老地址 | 国产精品久久成人影院| 久久精品视频一| 久久久WWW成人免费精品| 国产精品va久久久久久久| 亚洲中文字幕无码一久久区| 久久久久成人精品无码| 久久青草国产精品一区| 国产一级持黄大片99久久| 99麻豆久久久国产精品免费| 日韩人妻无码一区二区三区久久 | 99久久99久久精品免费看蜜桃| 久久精品国产2020| 狠狠色婷婷久久综合频道日韩| 色婷婷久久久SWAG精品| 亚洲国产日韩欧美综合久久| 免费精品久久久久久中文字幕| 国产无套内射久久久国产| 91亚洲国产成人久久精品| 久久久久国产亚洲AV麻豆| 久久久久人妻一区精品果冻|