QT 4.8.0 QURL的Bug??
来源:互联网 发布:朝阳永续数据库 编辑:程序博客网 时间:2024/06/05 03:17
最近, Qt4.8.0终于正式release了,由于想用它带的QtWebkit 2.2.0,就下载了一个。
解包, 写编译脚本, 设置环境变量,在arm平台交叉编译成功生成了熟悉的几个Qt库以及plugins以后。
编以前的qtwebkit应用: 自己写的一个简单浏览器。
编译成功后, 发现跑起来以后,访问不了本地页面, 只能访问服务器页面,
我访问本地页面用的是如下语句: webView->load(QUrl("foo.html"));
这个foo.html跟可执行文件放在同目录下,以前在qt4.7.4版本下是可以正常访问的。
这肯定是版本升级带来的问题,怎么办? 查代码啊,有源码,咱不怕。
结果跟啊跟啊, 问题定位到QUrl里去了,
主要是这条语句:
QUrl baseUrl = QUrl::fromLocalFile(QFileInfo(url.toLocalFile()).absoluteFilePath());
baseUrl的值是/mnt/qtbrowser而不是/mnt/qtbrowser/foo.html, 把foo.html给丢了。
在看QUrl的方法toLocalFile()竟然返回了一个空字符串, 而不是foo.html,怪不得baseUrl没有foo.html了。
罪魁祸首还是在这个判断中:
if (d->scheme.compare(QLatin1String("file"), Qt::CaseInsensitive) != 0)
return false;
由于d->scheme是空的,所以会返回false, 导致toLocalFile 返回空字符串。
对比了,4.7.4的代码, 发现4.7.4有个d->scheme.isEmpty()的判断, 如果是空的就不去比较,就不会返回false了。
分析到这里,情况就明朗了,原来, 还要对QUrl设置一个scheme啊, 调用QUrl的setScheme("file"),
问题解决了。
QUrl url("/mnt/qtbrowser/foo.html");url.setScheme(QLatin1String("file"));webView->load(url);//或者最省事:url.load(QUrl("file:///mnt/qtbrowser/foo.html");
唉, 说实话,当时我都有一种把d->scheme.isEmpty()判断加上的冲动, 省得我去加setScheme, 不想打补丁的人伤不起啊,就不打了。
- QT 4.8.0 QURL的Bug??
- QT 5.0.2 QUrl
- Qt之QUrl
- Qt之QUrl
- Qt之QUrl
- 通过Qt打开网页--QUrl
- QUrl
- Qt中QFtp和QURL获取带有中文的文件名称出现乱码的解决方法
- Qt解决QUrl含有中文或特殊字符无法下载的问题
- QT 4.4 的 BUG
- qt 的一个bug
- Qt的一个bug
- QT 字体设置的bug
- QT/E 4.5.0 For Embedded Linux 的 bug
- QUrl详解
- QUrl详解
- QUrl介绍
- 使用Qt打开外部文件,调用外部程序(QDesktopServices,QUrl ,QProcess,QProcess)
- hbase中region的规划与硬盘配置分析
- Jacob Java程序把Word文档直接转换成Html文件
- 解决在INPUT文本输入过程中使用Enter提交页面的问题
- 2.3 推荐器的评估
- 避免在 Chrome 上输错网站登录密码的办法
- QT 4.8.0 QURL的Bug??
- python实现的文本编辑器
- Activity类的runOnUiThread方法
- 上传文件操作类
- X5平台simpleSelect、gridSelect、treeSelect应用实例
- GIS的发展方向分类
- 用Java或Jsp向数据库存取二进制图片
- Android开发环境搭建
- $薪水谈判指南$:如何做到2年7个月涨9次工资