Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QtWebkit作为桌面应用程序GUI_C++_Windows_Qt_Webkit - Fatal编程技术网

C++ QtWebkit作为桌面应用程序GUI

C++ QtWebkit作为桌面应用程序GUI,c++,windows,qt,webkit,C++,Windows,Qt,Webkit,我想知道是否有人知道关于使用QTWebKit为windows桌面应用程序创建HTML GUI的好教程或文章 我主要关心的是在DLL(例如C++编写)和GUI(QtWebKIT)之间传递消息、事件和信息。 需要良好可靠的参考资料…这并不容易:出于安全考虑,Web浏览器是堡垒。因此,从网页中的JS到浏览器之外的东西是相当困难的 此外,QtWebKit不是一个非常开放的API。在您的例子中,最大的障碍是它不提供对DOM的访问,因此您只能替换整个HTML 因此,您需要修补和编写大量代码来实现缺少的API

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

<>我主要关心的是在DLL(例如C++编写)和GUI(QtWebKIT)之间传递消息、事件和信息。
需要良好可靠的参考资料…

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

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

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

自从Qt4.6发布以来,就有了QWebElement(例如),因此您至少可以访问DOM并对其进行修改。这将使很多事情变得更简单。我建议决定谁控制浏览器:你的应用程序是JavaScript,它调用外部还是应用程序真正在C++中,你使用浏览器作为智能UI渲染器? 一个更简单的方法可能是让您的想法发挥作用,即在应用程序启动时启动一个内部web服务器,然后打开一个指向本地服务器URL的QtWebKit视图。然后,您可以使用所有标准的web开发工具。Eclipse将此技术用于其内部帮助系统。

这可能会有帮助:

对于基本用法,trolltech的教程应该让您开始学习

Qt方法的优点是向脚本公开对象相对容易,请参见。在不同的嵌入式WebKITS中,JavaScript可以轻松地与C++通信(当然,如果在C++方面提供支持,那么在其他窗口中使用脚本)。缺点是,API似乎还不太稳定,似乎缺少支持将事件侦听器从JavaScript添加到C++对象(或者至少我没有看到它应该如何完成)的支持。 将自定义绘制的元素放入页面同样非常简单,您可以将插件嵌入页面(例如,通过
标记)并从返回自定义QWidgets


请记住一件重要的事情:对嵌入式webkit的调用(例如,用于评估JavaScript)应始终发生在主线程上。

我从不同的部分复制/粘贴位,但这就是我插入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
类中提供的任何插槽。

QWebElement和QWebElementSelection不允许访问操作DOM元素吗?我不知道Qt 4.6已经发布了。没错,请看这个链接:我改进了我的答案。它的后一个例子是“应用程序在C++中,你使用浏览器作为智能UI渲染器”亚伦,在C++中,脚本脚本调用和事件处理在我看来是复杂的,它通过一个附加的层(即WebServer)路由。此外,实现自定义绘制元素(视频,…)也变得相当粗糙。我刚才刚刚研究了第一个链接,也许这就是解决方案。。。。我想我必须先好好学习这些课程,然后再继续,看看这些是否是最终的解决方案。仍然不确定从DLL到页面的通信位…感谢您的宝贵意见。您能否提供更多信息,说明为什么“对嵌入式webkit(例如,用于评估JavaScript)的调用应始终发生在主线程上”?在我知道的任何当前浏览器中,脚本引擎位于主线程中,并且不是线程安全的。插件开发人员必须确保对浏览器的调用是从正确的线程发出的,除非一些API函数已经处理了这个问题——如果你不这样做,你就会得到未定义的行为,很可能会崩溃。