QML笔记点滴
2011-12-16 20:36
302 查看
QML 的一些小内容:
1. 应用qrc资源中的QML文件
下面这段代码是不会正常工作的,
这里顺带说明一点,在网上搜到一些文章中使用的时 setSource(QUrl("qrc:qml/main.qml")) 这种写法,但是事实证明这种写法是不正确的,qrc: 这种引用资源的方法应该是在 QML 文件中使用的,在 C++ 只需要冒号就可以了,加上 qrc 前缀反而找不到了。
我要收回这句话,今天发现还是自己的代码错了 —— 我将 main.qml 文件放到了qrc文件里一个名为 /qml 的prefix下面,因此引用 main.qml 应该写prefix加文件路径,即「 qrc:/qml/qml/main.qml 」,前一个 qml 是在 qrc 文件中设定的 prefix,后一个 qml 是放置 main.qml 的路径的一部分。而「:qml/main.qml」这个可以用,完全是因为
Qt 还是到本地的 qml 目录下面去找到了 main.qml 文件,而不是资源里面的那个
。
专门研究了一下关于应用资源时的 qrc 前缀问题,Qt 文档里对这个问题只字未提,这里补充上:
在C++中引用资源加不加 qrc: 前缀实际上跟引用资源的方法有关,如果在引用资源时使用了 QUrl 这个类,则必须在资源文件的路径前面加上「 qrc:」 ,否则,QUrl 只会到本地目录去搜索。例如:
相反,如果没有使用 QUrl 这个类,则不能使用
「qrc:」,而必须用「 :」,否则同样会找不到文件!例如:
参考:
http://developer.qt.nokia.com/forums/viewthread/1517
2. 在 QML 中访问资源
在 QML 中访问 qrc 中的资源可以使用 qrc:/ 加资源在qrc文件中的完整路径,如果 QML 文件本身就在 qrc 资源文件中,还可以使用 qrc: (没有斜杠)加资源相对当前 QML 文件的路径来获取。
例如:
假如当前 QML 文件位于资源中,并且位置为 qrc:/qml/main.qml ,那么下面这段代码和上面的等效:
3. 使用滑动条控件 ScrollDecorator
只需要设置 ScrollDecorator 的 flickableItem 属性为一个 Flickable 控件就可以了,但是需要注意:
所使用的 Flickable 必须设定 contentHeight 属性,并且这个属性的值必须大于屏幕高度(哪怕是screenHeight + 1都可以),否则就不会有滑动条和到边界反弹的效果。
4. 基本的QML类型,能够在 property 中使用的数据类型包括:
int
bool
double
real
string
url
color
date
variant
没有 list 类型,所以在 QML 组件间,不能够直接用属性传递字符串数组这样的内容,
如果必须的话可以使用一个JS文件定义文件,在两个 QML 中都 import 这个JS文件来传递内容,但是这样相当于全局变量而不是组件的内部属性,依然有局限性。
也许是因为C++的思维惯性,在使用 QML 的时候总很有一种很闷骚很不爽的感觉,控件的属性值不能直接用 JS,LineEdit(QML 称为 TextInput) 只有 onAccepted 一个信号,明明很简单的一个逻辑它就是做不了,有时候不得不写一堆 Hard code ..
1. 应用qrc资源中的QML文件
下面这段代码是不会正常工作的,
QmlApplicationViewer viewer; viewer.setMainQmlFile(QLatin1String(":qml/main.qml"));因为在 QmlApplicationViewer::setMainQmlFile() 方法中实际执行了代码:
d->view->setSource(QUrl::fromLocalFile(d->mainQmlFile));fromLocalFile 只能接受一个本地硬盘的文件,正确的写法如下
QmlApplicationViewer viewer; viewer.setSource(QUrl("qrc:/qml/qml/main.qml"));
这里顺带说明一点,在网上搜到一些文章中使用的时 setSource(QUrl("qrc:qml/main.qml")) 这种写法,但是事实证明这种写法是不正确的,qrc: 这种引用资源的方法应该是在 QML 文件中使用的,在 C++ 只需要冒号就可以了,加上 qrc 前缀反而找不到了。
我要收回这句话,今天发现还是自己的代码错了 —— 我将 main.qml 文件放到了qrc文件里一个名为 /qml 的prefix下面,因此引用 main.qml 应该写prefix加文件路径,即「 qrc:/qml/qml/main.qml 」,前一个 qml 是在 qrc 文件中设定的 prefix,后一个 qml 是放置 main.qml 的路径的一部分。而「:qml/main.qml」这个可以用,完全是因为
Qt 还是到本地的 qml 目录下面去找到了 main.qml 文件,而不是资源里面的那个
。
专门研究了一下关于应用资源时的 qrc 前缀问题,Qt 文档里对这个问题只字未提,这里补充上:
在C++中引用资源加不加 qrc: 前缀实际上跟引用资源的方法有关,如果在引用资源时使用了 QUrl 这个类,则必须在资源文件的路径前面加上「 qrc:」 ,否则,QUrl 只会到本地目录去搜索。例如:
viewer.setSource(QUrl("qrc:/qml/qml/main.qml"));
相反,如果没有使用 QUrl 这个类,则不能使用
「qrc:」,而必须用「 :」,否则同样会找不到文件!例如:
label->setPixmap(QPixmap(":/img/1.jpg"));
参考:
http://developer.qt.nokia.com/forums/viewthread/1517
2. 在 QML 中访问资源
在 QML 中访问 qrc 中的资源可以使用 qrc:/ 加资源在qrc文件中的完整路径,如果 QML 文件本身就在 qrc 资源文件中,还可以使用 qrc: (没有斜杠)加资源相对当前 QML 文件的路径来获取。
例如:
Image { source: "qrc:/qml/images/title.png" }
假如当前 QML 文件位于资源中,并且位置为 qrc:/qml/main.qml ,那么下面这段代码和上面的等效:
Image { source: "qrc:images/title.png" }
3. 使用滑动条控件 ScrollDecorator
只需要设置 ScrollDecorator 的 flickableItem 属性为一个 Flickable 控件就可以了,但是需要注意:
所使用的 Flickable 必须设定 contentHeight 属性,并且这个属性的值必须大于屏幕高度(哪怕是screenHeight + 1都可以),否则就不会有滑动条和到边界反弹的效果。
4. 基本的QML类型,能够在 property 中使用的数据类型包括:
int
bool
double
real
string
url
color
date
variant
没有 list 类型,所以在 QML 组件间,不能够直接用属性传递字符串数组这样的内容,
如果必须的话可以使用一个JS文件定义文件,在两个 QML 中都 import 这个JS文件来传递内容,但是这样相当于全局变量而不是组件的内部属性,依然有局限性。
也许是因为C++的思维惯性,在使用 QML 的时候总很有一种很闷骚很不爽的感觉,控件的属性值不能直接用 JS,LineEdit(QML 称为 TextInput) 只有 onAccepted 一个信号,明明很简单的一个逻辑它就是做不了,有时候不得不写一堆 Hard code ..
相关文章推荐
- 【笔记】verilog设计经验点滴
- QML学习笔记之二
- 点滴的学习快乐——CorelDraw 学习笔记 (1)
- 学习点滴笔记
- 点滴笔记
- 点滴线程(笔记)
- 点滴笔记(二):利用JS对象把值传到后台
- qml学习笔记(七):输入元素鼠标输入MouseArea和键盘输入Keys
- QML学习笔记 创建页面表示方法
- 我的QML学习笔记-前言
- QML笔记整理——QML与Scripting
- QML笔记整理——在Qt/C++应用中使用QML
- ISO笔记:点滴
- 点滴积累【JS】---Ajax传值(三层)笔记
- QML与c++交互学习笔记(八) qt c++直接调用QML中的函数, 直接设置属性
- 【笔记】SQL点滴 2017-08-21
- Qt笔记-qml-radionButton
- QML项目笔记
- 杂乱数据点滴笔记
- spring学习笔记(点滴记录)