QtQuick学习整理

1 使用qmlRegisterType注册cpp的类到qml中去时,出现LNK2001错误,提示找不到要导入到qml中的类,
解决方法: 把工程的debug文件夹删除,重新编译,成功
链接: http://stackoverflow.com/questions/14170770/unresolved-external-symbol-public-virtual-struct-qmetaobject-const-thiscal

2 属性特性
 属性是QML对象的一种特性,它即可以被赋予静态值,也能够绑定一个动态的表达式。其他对象可以读取一个对象的属性,在没有显示拒绝的情况下也能够修改这个对象的某个属性。

属性的定义/属性的声明
在这里属性的定义和属性的声明是相同的意思。
通过以下方法在QML文档里对象类型声明中声明一个自定义的属性。
[default] property

这种方式的对象声明把某些特殊值暴露给外部的对象或容易地维护内部状态。
属性名必须以小写字母或下划线开头,Javascript保留字不是合法的属性名。关键字default是可选的。
声明一个自定义属性的同时隐式地为该属性创建一个值改变信号以及一个关联的信号处理器onChanged,第一个字母要大写。
如下所示,下面的对象声明继承基类型的基础上定义了一个新的Retangle类型,它有两个新的属性和一个信号处理器:
Rectangle {
property color previousColor
property color nextColor
onNextColorChanged: console.log(“The next color will be: ” + nextColor.toString())
}
自定义属性中合法的类型
除了枚举类型外,所有的QML基本类型都可以作为自定义属性的类型。例如,下面都是合法的属性声明:
Item {
property int someNumber
property string someString
property url someUrl
}
枚举值就是一个整数数字,因此可以使用int类型来替代。
有些基本类型是由QtQuick模块提供的,使用前必须将该模块导入。

var类型是通用类型,能够保存包括list类型和object类型在内的所有类型的值。
property var someNumber: 1.5
property var someString: “abc”
property var someBool: true
property var someList: [1, 2, “three”, “four”]
property var someObject: Rectangle { width: 100; height: 100; color: “red” }

3 QString和string的相互转换
在头文件中添加inlucde信息和转换函数声明:

#include   
#include   
#include   
#include   

QString s2q(const string &s);  
string q2s(const QString &s);  

在主体CPP文件中添加以下转换函数即可:

QString s2q(const string &s)  
{  
return QString(QString::fromLocal8Bit(s.c_str()));  
}  
string q2s(const QString &s)  
{  
return string((const char *)s.toLocal8Bit());  
}  

3 Q_PROPERTY

Q_PROPERTY(type name READ getFunction [WRITE setFunction] [RESET resetFunction] [NOTIFY notifySignal] [DESIGNABLE bool] [SCRIPTABLE bool] [STORED bool] [USER bool] [CONSTANT] [FINAL])  

Q_PROPERTY()是一个宏,用来在一个类中声明一个属性property,由于该宏是qt特有的,需要用moc进行编译,故必须继承于QObject类
几个例子

Q_PROPERTY(bool focus READ hasFocus)  
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)    
Q_PROPERTY(QString title READ title WRITE setTitle USER true)

一个属性行为类似于类里面的数据成员,但是他是却可以通过Meta-Object System来访问.一下几点需注意:
 1) 必须有一个read函数。它用来读取属性值。因此用Const限定。它的返回值类型必须为属性类型或者属性类型的引用或者指针。不能是其他类型例如:QWidget::hasFocus().
 2) 有一个可选的write函数。它用来设置属性值,它的返回值必须为void型,而且必须要含有一个参数。
 3) 一个reset函数能够把property设置成其默认状态,它也是可选的。复位功能必须返回void,并且不带参数
 4) 一个NOTIFY信号是可选的 。如果定义,它提供了一个信号这个信号在值发生改变时会自动被触发。
 5) USER 属性 表面是否可以被用户所编辑
 6) CONSTANT设定属性是不可修改的 所以不能跟WRITE或者NOTIFY同时出现
 7) FINAL表明该属性不会被派生类中重写
4 static成员变量的初始化
类的static成员变量如果不初始化,编译时会报错:
error LNK2001: 无法解析的外部符号 “public: static class QMap

你可能感兴趣的:(Qt)