如果有谁知道好的教程或描述使用QtWebKit的一个Windows桌面应用程序中创建的HTML GUI的方法文章中,我想知道。QtWebKit的作为桌面应用程序GUI
我主要关心之间传递消息,事件和信息可以说,一个DLL(用C++编写为例)和GUI(QtWebKit的)。
需要良好的可靠参考文献......
如果有谁知道好的教程或描述使用QtWebKit的一个Windows桌面应用程序中创建的HTML GUI的方法文章中,我想知道。QtWebKit的作为桌面应用程序GUI
我主要关心之间传递消息,事件和信息可以说,一个DLL(用C++编写为例)和GUI(QtWebKit的)。
需要良好的可靠参考文献......
这并不容易:Web浏览器是出于安全考虑的要塞。所以从网页中的JS到浏览器以外的东西很难。
此外,QtWebKit的是不是一个非常开放的API。你的情况最大的障碍是它不提供你访问DOM,所以你只能替换整个HTML。
因此,您需要修补并编写大量代码来实现缺失的API和函数。
由于Qt 4.6已经发布,所以有QWebElement(例子为see the docs),所以你至少可以访问DOM并修改它。这会让很多事情变得更简单。我建议决定谁来控制浏览器:您的应用程序是否是JavaScript外部调用的应用程序,或者应用程序是否真的在C++中,并且您将浏览器用作智能UI呈示器?
一个更简单的方法可能是让你的思想工作,将启动内部Web服务器时,您的应用程序启动,然后打开指向本地服务器的URL一个QtWebKit的视图。然后,您可以使用所有标准的Web开发工具。 Eclipse将这种技术用于其内部帮助系统。
这可能帮助:
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/
我刚才正在研究第一个链接,也许这就是解决方案....我想我必须先好好研究这些类,然后才能继续研究这些是否是最终的解决方案。 仍然不确定有关从DLL到页面的通信位... – 2010-01-11 09:42:52
对于基本的用法,examples从奇趣应该让你开始。
Qt的方法的正侧是暴露对象到脚本是比较容易的,例如参见here。然后,不同嵌入式webkit中的JavaScript可以很容易地与C++进行通信(当然,如果您在C++端提供支持,则可以在其他窗口中使用脚本)。不利的一面是,API似乎还不够稳定,似乎缺少从JavaScript向C++对象添加事件侦听器的支持(或者至少我没有看到它应该如何完成)。
放置自定义绘制的元素到页面又是相当简单的,你的插件嵌入到页面(例如通过<object>
标签),并从QWebPluginFactory::create()返回定制QWidgets。
重要的是要始终牢记:调用嵌入式webkit(例如,用于评估JavaScript)应始终在主线程中发生。
感谢您提供富有洞察力的评论。您能否提供更多关于为什么“调用嵌入式webkit(例如,用于评估JavaScript)应始终出现在主线程中的信息”? – EightyEight 2010-03-04 17:47:11
在任何当前浏览器中,我知道脚本引擎驻留在主线程中,并且不是线程安全的。插件开发人员必须确保调用浏览器是从正确的线程发出的,除非一些API函数已经处理好了 - 如果你没有得到未定义的行为并且很可能崩溃。 – 2010-03-04 20:04:55
我复制/粘贴位来自不同的部分,但我这是怎么插入的对象是提供给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);
}
这使得MyApi
对象存在于JavaScript和我可以调用从MyApi
类提供的任何时隙。
doeesn't QWebElement和QWebElementSelection可以访问操作DOM元素吗? – 2010-01-11 09:37:43
它确实........ – 2010-01-11 10:01:36
我不知道Qt 4.6已经发布。你是对的,看看这个链接:http://doc.trolltech.com/4.6/qt4-6-intro.html#dom-access-api – 2010-01-11 10:32:07