qml图片相对路径linux,qml添加的图片路径

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

QML 的一些小内容:

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 文件,而不是资源里面的那个

0818b9ca8b590ca3270a3433284dd417.png

专门研究了一下关于应用资源时的 qrc 前缀问题,Qt 文档里对这个问题只字未提,这里补充上:

在C++中引用资源加不加 qrc: 前缀实际上跟引用资源的方法有关,如果在引用资源时使用了 QUrl 这个类,则必须在资源文件的路径前面加上「 qrc:」 ,否则,QUrl 只会到本地目录去搜索。例如:

viewer.setSource(QUrl("qrc:/qml/qml/main.qml"));

相反,如果没有使用 QUrl 这个类,则不能使用 「qrc:」,而必须用「 :」,否则同样会找不到文件!例如:

label->setPixmap(QPixmap(":/img/1.jpg"));

参考:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值