我想知道是否有人知道有关使用QTWebKit为Windows桌面应用程序创建HTML GUI的方法的好教程或文章。
我主要关注的是在一个DLL(用C ++编写)和GUI(QtWebKit)之间传递消息,事件和信息。
需要良好可靠的参考资料......
答案 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)
这可能会有所帮助:
http://labs.trolltech.com/blogs/2009/04/07/qwebelement-sees-the-light-do-i-hear-a-booyakasha/
http://labs.trolltech.com/blogs/2009/04/17/jquery-and-qwebelement/
答案 3 :(得分:2)
对于基本用法,来自trolltech的examples应该让你开始。
Qt方法的优点是将对象暴露给脚本相对容易,参见例如here。然后,不同嵌入式webkits中的JavaScript可以轻松地与C ++通信(当然,如果您在C ++端提供支持,则可以使用其他窗口中的脚本)。缺点是API似乎还不是很稳定,似乎缺少对从JavaScript添加到C ++对象的事件监听器的支持(或者至少我没有看到它应该如何完成)。
将自定义绘制的元素放入页面再次非常简化,您将插件嵌入到页面中(例如通过<object>
标记)并从QWebPluginFactory::create()返回自定义QWidgets。
重要的是要始终牢记:对嵌入式webkit的调用(例如用于评估JavaScript)应始终在主线程上进行。