详解QT中Webkit开发

移动开发
WebKit 是一个开源项目,其起源可追溯到 K Desktop Environment (KDE),WebKit项目催生了面向移动设备的现代 Web 应用程序。

QTWebkit开发,WebKit 是一个开源的浏览器引擎,与之相对应的引擎有Gecko(Mozilla Firefox 等使用)和Trident(也称MSHTML,IE 使用)。同时WebKit 也是苹果Mac OS X 系统引擎框架版本的名称,主要用于Safari,Dashboard,Mail 和其他一些Mac OS X 程序。

1、在Qt中使用 WebKit 浏览器核心

使用 QtWebKit 需要在工程文件(*.pro)中加入:

  1. QT +=webkit   
  2. QT += network 

2、QtWebKit的flash支持

QtWebKit 到固定的路径(NPAPI插件厂商的安装路径)下载入flash控件,如果需要flash支持,确保一下文件存在:

  1. C:\WINDOWS\system32\Macromed\Flash\NPSWF32.dll 

npswf32.dll就是 QtWebKit 需要的flash插件,由 micromedia 官方提供。

3、使用qt插件

分发程序时,需要打包 qt\plugins\imageformats 目录内的 dll 文件(它们是qt的图形图像插件),才能支持 jpg、png、gif等的图形图像格式;最好连 plugins\codecs 目录内的dll文件一起打包,他们是用来支持各种语言编码的(包括中文支持);除此以外还有其他一些qt插件。

4、如果使用了qt插件,需要设置qt插件路径

qt应用程序需要指定加载qt插件的目录,以便载入上面提到的 plugins\imageformats 、plugins\codecs 等目录内的dll文件。

标准方式是通过 qt.conf 文件(放在qt应用程序相同文件夹内)设置插件目录的路径。但是qt.conf内必须使用绝对路径,这不太容易确定。

可以直接在应用程序内指定 qt插件的路径,例如:

  1. QApplication aApp(argc,argv);  
  2. QApplication::setLibraryPaths(QStringList(QCoreApplication::applicationDirPath()+"/plugins/")); 

在调用 QCoreApplication::applicationDirPath() 前,必须先创建一个 QApplication的对象

5、中文支持:

  1. QTextCodec *codec=QTextCodec::codecForName("GB2312");  
  2. QTextCodec::setCodecForLocale(codec);  
  3. QTextCodec::setCodecForCStrings(codec);  
  4. QTextCodec::setCodecForTr(codec); 

6、使用 windows api

只要 #include<windows.h>就可以向MFC一样使用windows的api 函数,以及windows的数据类型,例如:LPCTSTR。

为了保持跨平台特性,在用到windows api 函数 和 windows数据类型的地方加上宏判断:

  1. #ifdefined(Q_WS_WIN)  
  2. ... ...  
  3. #endif 

7、让QtWebKit使用缓存

  1. QNetworkDiskCache *diskCache=newQNetworkDiskCache(this);  
  2. QString location=QDesktopServices::storageLocation(QDesktopServices::CacheLocation);  
  3. diskCache->setCacheDirectory(location);  
  4. this->ui->wndHtmlView->page()->networkAccessManager()->setCache(diskCache); 

QDesktopServices::storageLocation(QDesktopServices::CacheLocation);返回的是系统的缓存目录的路径

8、windows eclipse中无法启动 debug , 会报错:

  1. gdb: unknown target exception 0xc0000135 at 0x7c984ed1 

可能是因为用 gdb.exe 启动你的程序时无法找到qt库的dll, 只要在环境变量加入 qt/bin 的路径就好了

9、windows7/vista 中的 UAC 支持

建一个资源文件 resource.rc ,内容 :

  1. 1    24    "manifest.xml" 

资源类型为 24 , id 为 1 ,资源内容在 manifest.xml 中; manifest.xml 的内容为:

  1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
  2. <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  3. <assemblyIdentity 
  4. version="1.0.0.0" 
  5. processorArchitecture="X86" 
  6. name="test.exe.manifest" 
  7. type="win32" 
  8. /> 
  9. <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
  10. <security> 
  11. <requestedPrivileges> 
  12. <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> 
  13. </requestedPrivileges> 
  14. </security> 
  15. </trustInfo> 
  16. </assembly> 

在项目的 .pro (或 .pri) 文件中加入:

  1. RC_FILE = resource.rc 

(RC_FILE  只在 windows 平台上有效),然后 clean project 重新编译。

10、exe 版本信息 ,在资源文件中加入:

  1. # if defined(UNDER_CE)  
  2. #  include <winbase.h> 
  3. # else  
  4. #  include <winver.h> 
  5. # endif  
  6.  
  7. VS_VERSION_INFO VERSIONINFO  
  8.     FILEVERSION 1,0,0,0  
  9.     PRODUCTVERSION 1,0,0,0  
  10.     FILEFLAGSMASK 0x3fL  
  11. #ifdef _DEBUG  
  12.     FILEFLAGS VS_FF_DEBUG  
  13. #else  
  14.     FILEFLAGS 0x0L  
  15. #endif  
  16.     FILEOS VOS__WINDOWS32  
  17.     FILETYPE VFT_DLL  
  18.     FILESUBTYPE 0x0L  
  19.     BEGIN  
  20.        BLOCK "StringFileInfo"  
  21.         BEGIN  
  22.             BLOCK "040904B0"  
  23.             BEGIN  
  24.                 VALUE "CompanyName", "公司名字\0"  
  25.                 VALUE "FileDescription", "文件描述\0"  
  26.                 VALUE "FileVersion", "文件版本\0"  
  27.                 VALUE "ProductName", "产品名字\0"  
  28.                 VALUE "产品版本", "0.1.0\0"  
  29.                 VALUE "LegalCopyright", "版权信息\0"  
  30.             END  
  31.         END  
  32.     END  
  33. /* End of Version info */ 

小结:WebKit是开源的Web浏览器引擎,WebKit支持移动设备和手机,包括iPhoneAndroid手机都是使用WebKit做为浏览器的核心。

【编辑推荐】

浅谈Qt做文件浏览器

Qt/E服务器客户端架构

在Qt中如何写控制台程序

基于Qt Web浏览器设计与实现

Qt程序进入等待睡眠的正确方法

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-09-09 17:24:39

Qt Webkit模块

2011-08-29 10:01:27

QTWebkit插件

2011-09-01 14:04:45

QT Webkit插件

2011-09-01 15:22:16

Qt WebKitWebKit

2011-09-09 18:43:13

Qt Webkit浏览器

2011-10-13 14:26:12

Qt WebKitWebKit

2011-08-29 14:27:33

QTWebkit浏览器

2011-08-29 14:19:48

QtWebkit浏览器

2011-08-29 10:59:47

QtWebkit嵌入式

2011-06-20 09:26:38

Linux qtopia QT

2011-08-29 10:22:48

QtWebkit 模块HTML文档

2011-09-09 16:23:16

Android Web测试

2011-08-29 11:25:29

QTWebKit鼠标

2011-08-29 14:10:03

QtWebkitFlash

2011-06-24 09:13:30

QT SDL

2011-06-28 13:38:15

Arm linux QT

2013-09-04 14:25:30

webkitwebApp开发

2011-06-29 17:20:20

Qt 内存 QOBJECT

2011-06-28 15:18:45

Qt 单例模式

2011-08-29 14:40:58

QTWebkit
点赞
收藏

51CTO技术栈公众号