在Qt中将C ++对象暴露给Javascript

时间:2010-04-26 12:16:29

标签: javascript c++ qt qtwebkit

有什么方法可以将Q ++对象/函数公开给在Qt中的QtWebKit浏览器中运行的JavaScript?可以将ActionScript对象公开给在Adobe AIR中的WebKit浏览器中运行的JS代码 - 我正在Qt中寻找类似的功能。

2 个答案:

答案 0 :(得分:4)

编辑:链接工作,但仅仅是因为理查德摩尔的[Link]链接突然出现 ......

  

我见过一个关于#qt和qt-interest的问题是怎么回事   将自定义(特定于应用程序)API添加到默认情况下可用的API   QtWebKit的。这实际上非常简单(一旦你知道如何),我将展示   下面。这篇文章将展示如何使对象可用的简单示例   来自javascript,包括调用对象上的方法和返回值   来自C ++。

     

为了执行此操作,您确实需要了解两件事   集成,首先是addToJavaScriptWindowObject()方法   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下载代码。

答案 1 :(得分:2)

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