Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.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++;对象到Qt中的Javascript 是否有任何方法可以将QC++对象/函数暴露在QtWebKIT浏览器中运行的JavaScript中?可以将ActionScript对象公开给AdobeAIR中WebKit浏览器中运行的JS代码—我正在寻找Qt中类似的功能。_Javascript_C++_Qt_Qtwebkit - Fatal编程技术网

暴露C++;对象到Qt中的Javascript 是否有任何方法可以将QC++对象/函数暴露在QtWebKIT浏览器中运行的JavaScript中?可以将ActionScript对象公开给AdobeAIR中WebKit浏览器中运行的JS代码—我正在寻找Qt中类似的功能。

暴露C++;对象到Qt中的Javascript 是否有任何方法可以将QC++对象/函数暴露在QtWebKIT浏览器中运行的JavaScript中?可以将ActionScript对象公开给AdobeAIR中WebKit浏览器中运行的JS代码—我正在寻找Qt中类似的功能。,javascript,c++,qt,qtwebkit,Javascript,C++,Qt,Qtwebkit,是的。看看它应该是一个好的开始。编辑:链接正在工作,但以防理查德·摩尔再次中断链接 ... 我在#qt和qt兴趣上多次遇到的一个问题是如何 将自定义(特定于应用程序的)API添加到中默认可用的API中 QtWebKit。正如我将要展示的,这其实很容易(一旦你知道怎么做) 在下面这篇文章将展示一个如何使对象可用的简单示例 来自javascript,包括对对象调用方法和返回值 从C++ +< /P> 要执行此操作,有两件事是您真正需要知道的 集成,第一个是的addToJavaScriptWindo

是的。看看它应该是一个好的开始。

编辑:链接正在工作,但以防理查德·摩尔再次中断链接 ...

我在#qt和qt兴趣上多次遇到的一个问题是如何 将自定义(特定于应用程序的)API添加到中默认可用的API中 QtWebKit。正如我将要展示的,这其实很容易(一旦你知道怎么做) 在下面这篇文章将展示一个如何使对象可用的简单示例 来自javascript,包括对对象调用方法和返回值 从C++ +< /P> 要执行此操作,有两件事是您真正需要知道的 集成,第一个是的addToJavaScriptWindowObject()方法 QWebFrame,这允许将指定的QObject从 javascript。您需要知道的第二件事是在 每次清除javascript窗口对象时,这种方式都将消失- 即,每次用户导航到新页面时。为了防止这造成 问题是,QWebFrame提供了一个信号,告诉您对象何时被激活 已清除,允许您重新添加自定义API。这实际上要简单得多 比听起来更糟

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

这段代码就是您所需要的全部代码,以便生成的所有公共插槽 MyApi对象对javascript可见。MyApi类提供两个公共插槽:

第一个插槽只是将消息记录到调试输出,第二个插槽返回 它的两个参数之和(是的,插槽可以返回东西!)。他们被称为 来自如下javascript:

这就是全部!您可以从>下载代码


不幸的是,该示例在QT5中不起作用。有没有更新的机会,或者我应该再问一个问题?
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 );
}
public slots:
    void doSomething( const QString &param );
    int doSums( int a, int b );
  MyApi.doSomething( 'Hello from JS page 2!!!!' );

  sum = MyApi.doSums( 2, 3 );
  alert( 'C++ says the sum is ' + sum );