1. 应用qrc资源中的QML文件

下面这段代码是不会正常工作的,

因为在 QmlApplicationViewer::setMainQmlFile() 方法中实际执行了代码:

fromLocalFile 只能接受一个本地硬盘的文件,正确的写法如下

 

将 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:」,而必须用「 :」,否则同样会找不到文件!例如:

 

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 ..

 

转载自:http://blog.csdn.net/lynfam/article/details/7078540