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


            秋霞久久国产精品电影院| 久久久国产精华液| 精品国产一区二区三区久久久狼| 性欧美丰满熟妇XXXX性久久久| 五月丁香综合激情六月久久| 久久午夜伦鲁片免费无码| 青青青国产成人久久111网站| 国产精品内射久久久久欢欢| 美女久久久久久| 少妇精品久久久一区二区三区| 久久精品成人免费网站| 99久久香蕉国产线看观香| 欧洲人妻丰满av无码久久不卡| 国产视频久久| 九九久久自然熟的香蕉图片| 久久99久久无码毛片一区二区| 亚洲国产精品无码久久久秋霞2| AA级片免费看视频久久| 亚洲狠狠婷婷综合久久久久| 久久免费视频一区| 久久综合九色综合久99| 亚洲色大成网站www久久九| 国内精品免费久久影院| 久久99精品国产自在现线小黄鸭| 久久久艹| 久久99国产精品成人欧美| 国内精品久久九九国产精品| 国色天香久久久久久久小说| 久久se精品一区精品二区国产| 久久综合精品国产二区无码| 久久人人爽人人爽人人av东京热| 国产精品久久久久乳精品爆| 色成年激情久久综合| 国产欧美久久久精品| 7777精品久久久大香线蕉 | 亚洲AV无码成人网站久久精品大| 国产成人久久久精品二区三区| 国内精品久久久久| 久久国产精品久久国产精品| 久久精品国内一区二区三区| 97久久精品午夜一区二区|