也算是赶潮流吧,安装了Qt5.4.1开始做QML路线,那个界面确实很炫,不过本人对于脚本开发使用很少,在此一起学习吧,本人大叔一个,小伙伴们,如果是年轻的朋友千万不要气馁,做技术吗要踏踏实实的。
第一个看Qt QML,开篇告诉了一些简单内容,如:#include<QtQML>定义所有模块头文件,如果初学者可以,毕竟比较省事吗,我建议在学习了熟悉后,不要这么写了,用到什么定义什么,不然编译器加载太多东西会很累的。(注:qml类型只支持继承自QObject的类)
pro文件中要写QT += qml(注意大小写,尽量不要很随意)
脚本头:import QtQml 2.0
#ifndef PERSON_H
#define PERSON_H
#include <QObject>
//![0]
class Person : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE setName)
Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
public:
Person(QObject *parent = 0);
QString name() const;
void setName(const QString &);
int shoeSize() const;
void setShoeSize(int);
private:
QString m_name;
int m_shoeSize;
};
//![0]
#endif // PERSON_H
这个不用解释太多,用过Qt人都应该理解,元对象技术,说白了就是把一部分代码让Qt帮你生成,看见那些宏了吗(Q_OBJECT,QPROPERTY)不清楚google,雅虎去吧。
这个典型的元对象类,有属性,有方法,怎么让加入脚本引擎解析呢,看main.cpp
#include <QQmlEngine>
#include <QQmlComponent>
这两个头文件,我们去帮助看看,The QQmlEngine class provides an environment for instantiating QML components.好了,QQmlEngine提供了一个实例化QML组件的环境,这个类就是我们提到的QML引擎,(解析脚本用滴)The QQmlComponent class encapsulates a QML component definition,QQmlComponent 就是封装了一个QML组件,可以把Person当做一个组件,呵呵。
int qmlRegisterType(const char * uri, int versionMajor, int versionMinor, const char * qmlName)
qmlRegisterType类型注册,This template function registers the C++ type in the QML system with the name qmlName, in the library imported from uri having the version number composed from versionMajor and versionMinor.这是一个模板函数,将C++类型(Qt)注册到QML系统内部,第一个参数是体现在QML的类型名,versionMajor主版本号,versionMinor子版本好,最后一个就是要注册的C++的类名
import People 1.0
这里People 是uri,1就是versionMajor,0是versionMinor
qmlRegisterType<Person>("People", 1,0, "Person");
QQmlEngine engine;
QQmlComponent component(&engine, QUrl("qrc:example.qml"));
好了,下面开始调用QML了,定义引擎和组件,
Person {
name: "Bob Jones"
shoeSize: 12
}
qml里面定义了Person和它的两个属性赋值。
QObject *myObject = component.create();
这样就可以把组件创建出来了,这里的代码用了一个强转,由于我们前面定义了类型所以这里这样写:
Person *person = qobject_cast<Person *>(component.create());
那么我们就可以获取这个对象的属性信息了,测试下就可以看到打印结果了。
qWarning() << "The person's name is" << person->name();
qWarning() << "They wear a" << person->shoeSize() << "sized shoe";
|