QtWebkit作为桌面应用程序GUI

时间:2010-01-11 09:08:00

标签: c++ windows qt webkit

我想知道是否有人知道有关使用QTWebKit为Windows桌面应用程序创建HTML GUI的方法的好教程或文章。

我主要关注的是在一个DLL(用C ++编写)和GUI(QtWebKit)之间传递消息,事件和信息。

需要良好可靠的参考资料......

4 个答案:

答案 0 :(得分:4)

这并不容易:出于安全考虑,Web浏览器是堡垒。因此,很难从网页中的JS到浏览器之外的东西。

此外,QtWebKit不是一个非常开放的API。您的案例中最大的障碍是它不提供对DOM的访问权限,因此您只能替换整个HTML。

因此,您需要修补并编写大量代码来实现缺少的API和函数。

自Qt 4.6发布以来,有QWebElement(例如see the docs),因此您至少可以访问DOM并对其进行修改。这将使很多事情变得更加简单。我建议决定谁控制浏览器:你的应用程序是外部调用的JavaScript还是真正使用C ++的应用程序,你是否将浏览器用作智能UI渲染器?

更简单的方法可能是让您的想法工作在应用启动时启动内部Web服务器,然后打开指向本地服务器URL的QtWebKit视图。然后,您可以使用所有标准Web开发工具。 Eclipse将此技术用于其内部帮助系统。

答案 1 :(得分:3)

我正在复制/粘贴来自不同部分的位,但这是我插入一个可用于javascript的对象,然后我使用javascript与主应用程序交谈。似乎运作良好......

void MyApi::setWebView( QWebView *view ) {

    QWebPage *page = view->page();
    m_frame = page->mainFrame();

    attachObject();
    connect( m_frame, SIGNAL(javaScriptWindowObjectCleared()), 
        this, SLOT(attachObject()) );

}

void MyApi::attachObject() {

    m_frame->addToJavaScriptWindowObject( QString("MyApi"), this );

}

这使得javascript中存在MyApi对象,我可以调用MyApi类提供的任何插槽。

答案 2 :(得分:2)

答案 3 :(得分:2)

对于基本用法,来自trolltech的examples应该让你开始。

Qt方法的优点是将对象暴露给脚本相对容易,参见例如here。然后,不同嵌入式webkits中的JavaScript可以轻松地与C ++通信(当然,如果您在C ++端提供支持,则可以使用其他窗口中的脚本)。缺点是API似乎还不是很稳定,似乎缺少对从JavaScript添加到C ++对象的事件监听器的支持(或者至少我没有看到它应该如何完成)。

将自定义绘制的元素放入页面再次非常简化,您将插件嵌入到页面中(例如通过<object>标记)并从QWebPluginFactory::create()返回自定义QWidgets。

重要的是要始终牢记:对嵌入式webkit的调用(例如用于评估JavaScript)应始终在主线程上进行。