代码之家  ›  专栏  ›  技术社区  ›  Zaid Amir

作为桌面应用程序GUI的qtwebkit

  •  6
  • Zaid Amir  · 技术社区  · 16 年前

    我想知道是否有人知道一些很好的教程或文章,它们描述了使用qtwebkit为Windows桌面应用程序创建HTML GUI的方法。

    我主要关心的是在DLL(例如以C++编写)和GUI(QtWebKIT)之间传递消息、事件和信息。

    需要可靠的参考资料…

    4 回复  |  直到 12 年前
        1
  •  4
  •   Aaron Digulla    16 年前

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

    此外,qtwebkit不是一个非常开放的API。在这种情况下,最大的障碍是它不提供对DOM的访问,因此您只能替换整个HTML。

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

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

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

        2
  •  3
  •   franzlorenzon    12 年前

    我从不同的部分复制/粘贴比特,但这是我如何插入一个可供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中,我可以调用 我的API 班级。

        4
  •  2
  •   Georg Fritzsche    16 年前

    对于基本用法, examples 从Trolltech开始。

    qt方法的另一个好处是,向脚本公开对象相对容易,请参见例如。 here . 在不同的嵌入式WebKITS中,JavaScript可以轻松地与C++通信(当然,如果在C++方面提供支持,则在其他窗口中使用脚本)。缺点是API看起来不太稳定,似乎缺少支持将事件侦听器从JavaScript添加到C++对象(或者至少我没有看到它应该如何完成)的支持。

    将自定义绘制的元素放到页面中同样非常简单,您可以将插件嵌入到页面中(例如,通过 <object> 标记)并从 QWebPluginFactory::create() .

    重要的是要始终牢记:对嵌入式WebKit(例如用于评估javascript)的调用应该始终发生在主线程上。