您的位置:首页 > 编程语言 > C语言/C++

QML与c++交互学习笔记(六) 关于qt c++中创建对象,QML获取此对象数据问题

2011-07-02 16:50 806 查看
1.假设1.在c++中创建一个Person的对象,2.在QML中获取并显示数据3.在c++中改变数据后,显示的数据能进行相应的改变也就是说我们实际是在c++中new一个对象出来,而把这个对象的数据在QML里面进行显示
2.具体代码

// person.h
#ifndef PERSON_H
#define PERSON_H
#include <QObject>
#include <QDeclarativeListProperty>
#include <QList>
#include <QColor>
class Person : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ getName WRITE setName NOTIFY sendNameChange)
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);
// 一个简单的函数, 获取蓝色
Q_INVOKABLE QColor getColor(void) const;
Q_INVOKABLE void changeNameAndAge(void);
signals:
void sendNameChange(void);
void sendAgeChange(void);
private:
QString     m_Name;
int         m_Age;
};
#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();
}
//---------------------------------
//
QColor Person::getColor(void) const
{
return QColor(Qt::blue);
}
//---------------------------------
//
void Person::changeNameAndAge(void)
{
setName("Luly");
setAge(31);
}
// main.cpp
#include <QtGui/QApplication>
#include <QtDeclarative/QDeclarativeView>
#include <QtDeclarative/QDeclarativeEngine>
#include <QtDeclarative/QDeclarativeComponent>
#include <QtDeclarative/QDeclarativeContext>
#include "person.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Person tmpPerson;
tmpPerson.setName("Tom");
tmpPerson.setAge(25);
QDeclarativeView qmlView;
qmlView.rootContext()->setContextProperty("ps",&tmpPerson);
qmlView.setSource(QUrl::fromLocalFile("../UICtest/UICtest.qml"));
qmlView.show();
return a.exec();
}
// UICtest.qml
import Qt 4.7
Rectangle {
width: 640
height: 480
Text { text: "Person name:" + ps.name; }
Text { y: 20; text: "Person age:" + ps.age; }
Rectangle{ x: 20; y: 40;  width: 20; height: 20; color: ps.getColor();}
MouseArea{
anchors.fill: parent;
// 当鼠标按下后改变名字和年龄
onClicked: { ps.changeNameAndAge(); }
}
}
说明:我们在c++中创建来一个对象,并且在把这个对象导出给QML调用用,我们设置来属性,QML中可以直接使用属性来进行赋值.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ qt object c
相关文章推荐