关于Qt的一切(续)
(前文见此)
网页内容和本地代码的紧密集成
Qt4.4另一个令人非常兴奋的特性在于新的QtWebKit模块,它允许开发人员实现HTML内容和本地工具组件的无缝结合。WebKit是一种基于KDE社区KHTML框架的开源HTML渲染器,最初是由苹果为Safari开发的。WebKit轻量、可移植、且易于嵌入的特性使得其越来越多地被Nokia、Adobe、Google等公司引入到其产品中。
全新的QWebView工具组件通过一系列携带signal和property的高层Qt API来展现web功能,其底层是一种完全基于WebKit的HTML渲染引擎。QWebView工具组件可以在Designer工具中像其它工具组件一样被轻松置入Qt form中。它支持从本地或远程URIs或字符串中载入HTML内容。
QtWebKit允许开发人员能够轻松地将其本地代码方法和JavaScript紧密结合,并通过本地代码对QWebView中上下文的JavaScript代码进行评估。这就意味着其支持一种双向集成:开发人员能够将本地Qt工具组件嵌入至网页内容中,甚至可以给JavaScript函数绑定Qt signals。Trolltech开发人员Kent Hansen的博客在上周明确展示了QWebKit是如何在本地代码中使用的:他演示了一种如何把Qt Designer用户接口描述文件动态集成到QWebView中,并使用QtScript演示了整个过程。正如上述概念所示,他能把Qt tutorials中的一张截图替换成具有完整功能的应用程序版本,并直接嵌入至HTML页面。
如同hansen展示的这种开发技术已经大大扩展了Qt在未来的潜力。这种方法可以用于构建快速原型,并为应用程序提供更多扩展能力。正如我们今年早前一篇文章中介绍的关于在linux中利用WebKit创建RIAs的主题,Trolltech的方法比起Adobe的AIR这种完全自给自足的模式使得RIAs开发更为灵活、更具有扩展性并且更加易于代码重用。
除了提供HTML渲染功能以外,QWebKit也提供一种用于处理其它面向浏览器功能如代理、cookies、网络以及SSL支持的完整组件堆栈。Trolltech的开发人员Benjamin Meyer已经在开发一种完全基于Qt的名叫Arora的工具,它是一种可用于概念验证(Proof of Concept )的网页浏览器。
Qt4.4中的WebKit版本大约于六个月前发布。Meyer声称Trolltech计划将为Qt 4.5提供更多基于新版WebKit的改进。苹果的WebKit最近在Acid 3的CSS测试中达到了百分之百通过,且在最近几个月又加入了大量绚丽丰富的特性,如CSS渐变(gradients)和图像倒影(reflection)功能。
Trolltech同时计划在Qt工具组件中实现对标准浏览器插件如Flash、Java applets的支持,以使其能够嵌入至Qt应用程序中。规划中的另一个特性是开发一种基于Qt的API以简化对网页内容的操作,如标准DOM API,但更加轻量级。关于QtWebKit的更多细节,请查阅Trolltech白皮书。(译注:Trolltech白皮书非周期性发布,经验证源地址已无效,目前在http://qt.nokia.com/files/pdf可以看到所有的pdf资源,包括Qt4.4的whitepaper,如果对Qt的roadmap感兴趣可以查看这里http://qt.nokia.com/developer/qt-roadmap,当然最佳的做法是加入官方maillist,我们将在文后提供相关信息)
QGraphicsView工具组件
QGraphicsView canvas工具组件在Qt4.4中得到了重大改进,包括对全部本地Qt工具组件的支持。具有完整交互功能的工具组件能被直接添加进canvas中并向其它任何canvas绘制组件一样运行。这种特性能够实现工具组件的移动动画,并提供更加复杂的视觉效果。Trolltech的开发人员实现了对输入重定向的完整支持,这意味着用户可以和基于QGraphicsView canvas的Qt工具组件任意交互,甚至当这些组件处于各种动画效果时亦如此。
“Graphics View并不会自身提供工具组件如QLineEdit或者QComboBox,相反,你应当把现有的工具组件嵌入到场景中(事实上,任何用户自定义的工具组件皆能如此),这一功能可以通过调用QGraphicsScene::addWidget()实现。”Trolltech的Andreas Hanssen的博客在去年阐述了这种功能。“如果你还想传入Qt::Window标识,”你的工具组件甚至将类似QMdiSubWindow一样获得窗口装饰效果。你可以拖动、自定义大小、旋转、缩放或者结合工具组件和其它组件生成极具想象力的修饰或效果转换。
QGraphicsView支持添加Qt工具组件的功能为更加丰富的用户界面创造了无穷的潜力:这些界面将不再受传统布局框架的局限。工具组件可以在角度变换中漂浮、自由旋转、或者根据用户交互信息变换。桌面上存在大量可供canvas工具组件渲染的位置将提供更多的实用性。例如,在KDE桌面环境中将把这种特性应用于Plasma desktop shell。(译注:Plasma即是KDE的桌面组件)
当我们在去年首次试验这种新特性时,我们查看了Trolltech的示例代码以确定它是如何工作的,之后我们创建了一个测试应用程序以展示在QGraphcisView中变更角度以缩放和渲染一个QWebView工具组件。这一过程非常易于操作,且仅需要少量代码即可实现。
在我们的测试中发现了极少量的技术缺陷问题,如下拉列表菜单工具组件的定位bug——似乎在4.4发行版中得到修复。开发人员目前已经在很大程度上修正了我们之前测试中提出的性能问题,并且很负责地对这一问题做出更进一步的改进。
用Phonon播放音乐
Phonon是一种跨平台的多媒体抽象层,它提供了一些轻量级的API以支持简单的音频或视频片段的录放功能。它支持多后台运行,并且允许应用程序能够实现跨平台地多媒体处理功能,而非不得不去单独处理特定平台的实现细节问题。
Phonon最初是由KDE开发社区为KDE4开发的,且其最初只支持Xine后台(译注:一种类UNIX平台上的GPL多媒体播放引擎)运行。后来Trolltech决定将其引入Qt,因此他们开发了其他后台支持如GStreamer、Windows的DirecShow 9以及Mac Os X的QuickTime 7。Trolltech已经把这些后台的上行数据流和Phonon集成以便能够得到KDE社区的持续性开发和维护支持。
由于Trolltech引入的这些后台引擎使得Phonon能够与Windows和Mac OS X等操作系统中的本地多媒体框架无缝整合,Phonon自然将支持相关平台提供的任何解码器和多媒体格式。由于Phonon提供自身独立的抽象层,同样的代码可在Qt应用程序中实现基本多媒体操作的跨平台重用。
其它零碎工作
在一篇文章内完成Qt4.4所有改进特性的讨论几乎是无法实现的任务,至此我们也只是提供了一些最为显著的特性概览。一些其它同样精彩的特性,如新的并发框架——它可以简化多线程Qt应用程序开发,以及一个支持XQuery标准实现内容操作的XML框架。Qt4.4同时还包括了大量的性能改进和大范围的bug修复工作。
正如我们上周注意到的,Qt4.4已经被KDE所采用并将用于几个KDE4.1发行版的新特性中。采用Qt作为其跨平台桌面音乐端软件的社交音乐网站Last.fm,也已经在测试Qt4.4,新的Qt发行版将使Last.fm有潜力为Windows Mobile移动设备提供客户端应用软件。
(正文完)
编后:下篇文章中,我们将继续贴出其它部分的Qt在线资料。