QT中Webkit开发,WebKit 是一个开源的浏览器引擎,与之相对应的引擎有Gecko(Mozilla Firefox 等使用)和Trident(也称MSHTML,IE 使用)。同时WebKit 也是苹果Mac OS X 系统引擎框架版本的名称,主要用于Safari,Dashboard,Mail 和其他一些Mac OS X 程序。
1、在Qt中使用 WebKit 浏览器核心
使用 QtWebKit 需要在工程文件(*.pro)中加入:
- QT +=webkit
- QT += network
2、QtWebKit的flash支持
QtWebKit 到固定的路径(NPAPI插件厂商的安装路径)下载入flash控件,如果需要flash支持,确保一下文件存在:
- 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插件的路径,例如:
- QApplication aApp(argc,argv);
- QApplication::setLibraryPaths(QStringList(QCoreApplication::applicationDirPath()+"/plugins/"));
在调用 QCoreApplication::applicationDirPath() 前,必须先创建一个 QApplication的对象
5、中文支持:
- QTextCodec *codec=QTextCodec::codecForName("GB2312");
- QTextCodec::setCodecForLocale(codec);
- QTextCodec::setCodecForCStrings(codec);
- QTextCodec::setCodecForTr(codec);
6、使用 windows api
只要 #include<windows.h>就可以向MFC一样使用windows的api 函数,以及windows的数据类型,例如:LPCTSTR。
为了保持跨平台特性,在用到windows api 函数 和 windows数据类型的地方加上宏判断:
- #ifdefined(Q_WS_WIN)
- ... ...
- #endif
7、让QtWebKit使用缓存
- QNetworkDiskCache *diskCache=newQNetworkDiskCache(this);
- QString location=QDesktopServices::storageLocation(QDesktopServices::CacheLocation);
- diskCache->setCacheDirectory(location);
- this->ui->wndHtmlView->page()->networkAccessManager()->setCache(diskCache);
QDesktopServices::storageLocation(QDesktopServices::CacheLocation);返回的是系统的缓存目录的路径
8、windows eclipse中无法启动 debug , 会报错:
- gdb: unknown target exception 0xc0000135 at 0x7c984ed1
可能是因为用 gdb.exe 启动你的程序时无法找到qt库的dll, 只要在环境变量加入 qt/bin 的路径就好了
9、windows7/vista 中的 UAC 支持
建一个资源文件 resource.rc ,内容 :
- 1 24 "manifest.xml"
资源类型为 24 , id 为 1 ,资源内容在 manifest.xml 中; manifest.xml 的内容为:
- <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
- <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
- <assemblyIdentity
- version="1.0.0.0"
- processorArchitecture="X86"
- name="test.exe.manifest"
- type="win32"
- />
- <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
- <security>
- <requestedPrivileges>
- <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
- </requestedPrivileges>
- </security>
- </trustInfo>
- </assembly>
在项目的 .pro (或 .pri) 文件中加入:
- RC_FILE = resource.rc
(RC_FILE 只在 windows 平台上有效),然后 clean project 重新编译。
10、exe 版本信息 ,在资源文件中加入:
- # if defined(UNDER_CE)
- # include <winbase.h>
- # else
- # include <winver.h>
- # endif
- VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,0,0,0
- PRODUCTVERSION 1,0,0,0
- FILEFLAGSMASK 0x3fL
- #ifdef _DEBUG
- FILEFLAGS VS_FF_DEBUG
- #else
- FILEFLAGS 0x0L
- #endif
- FILEOS VOS__WINDOWS32
- FILETYPE VFT_DLL
- FILESUBTYPE 0x0L
- BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904B0"
- BEGIN
- VALUE "CompanyName", "公司名字\0"
- VALUE "FileDescription", "文件描述\0"
- VALUE "FileVersion", "文件版本\0"
- VALUE "ProductName", "产品名字\0"
- VALUE "产品版本", "0.1.0\0"
- VALUE "LegalCopyright", "版权信息\0"
- END
- END
- END
- /* End of Version info */
小结:WebKit是开源的Web浏览器引擎,WebKit支持移动设备和手机,包括iPhone和Android手机都是使用WebKit做为浏览器的核心。
【编辑推荐】