Posted on 2011-08-04 21:31
RTY 阅读(765)
评论(0) 编辑 收藏 引用 所属分类:
转载随笔 、
QML
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中可以直接使用属性来进行赋值.