QML与c++交互学习笔记(六) 关于qt c++中创建对象,QML获取此对象数据问题
2011-07-02 16:50
806 查看
1.假设1.在c++中创建一个Person的对象,2.在QML中获取并显示数据3.在c++中改变数据后,显示的数据能进行相应的改变也就是说我们实际是在c++中new一个对象出来,而把这个对象的数据在QML里面进行显示
2.具体代码
说明:我们在c++中创建来一个对象,并且在把这个对象导出给QML调用用,我们设置来属性,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(); } } } |
相关文章推荐
- QML与c++交互学习笔记(六) 关于qt c++中创建对象,QML获取此对象数据问题
- ajax实现异步获取数据 (js创建ajax对象)
- 2016.5.22读书笔记---C++如何获取一行未知个数的整型数据
- 关于进程创建时在驱动下获取命令行参数的问题
- 关于前台合并获取后台动态table中数据相同的单元格的问题;th td合并
- 关于C++中的临时对象问题
- [置顶] 关于C++、C#实现EXCEL数据库批量导入数据库万行以上数据效率问题
- Spring 创建对象的问题,不同构造方法创建对象,使用工厂类类获取对象、单例或多例、延迟创建问题
- 总结Asp.net中Page加载PostData的具体过程 进而解决"获取动态创建的控件的PostData数据"问题
- Spring学习笔记——关于Spring注解扫描不能注入new对象问题
- 关于struts2中与Spring中Action对象创建的问题
- Inside The C++ Object Model 学习笔记 -- 关于对象
- Qt 关于对象创建时parent的问题
- Android笔记 Application对象的使用-数据传递以及内存泄漏问题
- QML与c++交互学习笔记(八) qt c++直接调用QML中的函数, 直接设置属性
- 关于如何在C++应用程序中创建持久化对象的解决方案简析
- 关于C++中用静态成员统计实例化对象个数问题_CVTE技术面问题
- android-分页加载ListView 点击Item获取对象数据及ArrayList重复及乱序问题
- 关于C++调用C#封装的dll后,获取C#中string返回值的问题
- 关于对象的中间获取时,内存获取修改的问题