代码之家  ›  专栏  ›  技术社区  ›  BlueSilver

在QT中公开C++对象到JavaScript

  •  6
  • BlueSilver  · 技术社区  · 16 年前

    有什么方法可以让C++对象/函数在Qt中的QtWebKIT浏览器中运行到JavaScript?可以将actionscript对象公开给运行在adobe air的webkit浏览器中的js代码——我正在qt中寻找类似的功能。

    2 回复  |  直到 11 年前
        1
  •  2
  •   Bill Lynch    11 年前

    对。看一看 this. 这应该是个好的开始。

        2
  •  4
  •   M H    12 年前

    编辑:链接正在工作,但以防链接再次断开 [Link] 理查德·摩尔 …

    有一个问题我在qt和qt上见过好几次,我感兴趣的是如何 将自定义(特定于应用程序)API添加到中默认可用的API QtWebKit。这其实很简单(一旦你知道怎么做),我会告诉你 下面。本文将展示一个简单的示例,说明如何使对象可用 从javascript,包括对对象调用方法和返回值 从C++。

    有两件事你需要知道才能完成 集成,第一个是 qwebframe,这将使指定的qobject从 JavaScript。您需要知道的第二件事是 每次清除javascript窗口对象时,这种方式都将消失- 即每次用户导航到新页面时。为了防止这种情况 问题是,qwebframe提供一个信号,告诉您对象何时 已清除,允许您重新添加自定义API。这其实要简单得多 比听起来还多!

    在本例中,其核心实际上是通过两种方法实现的,它们是 如下所示:

    void MyApi::setWebView( QWebView *view )
    {
        QWebPage *page = view->page();
        frame = page->mainFrame();
    
        attachObject();
        connect( frame, SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(attachObject()) );
    }
    
    void MyApi::attachObject()
    {
        frame->addToJavaScriptWindowObject( QString("MyApi"), this );
    }
    

    为了使 myapi对象对javascript可见。myapi类提供两个公共时隙:

    public slots:
        void doSomething( const QString &param );
        int doSums( int a, int b );
    

    第一个插槽只是将消息记录到调试输出,第二个插槽返回 它的两个参数之和(是的,插槽可以返回东西!)他们被叫来了 从这样的javascript:

      MyApi.doSomething( 'Hello from JS page 2!!!!' );
    
      sum = MyApi.doSums( 2, 3 );
      alert( 'C++ says the sum is ' + sum );
    

    就这些!您可以从> http://xmelegance.org/devel/qtwebkitextension.tar.gz .