Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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
QtWebkit:如何将异常从Qt发送到JavaScript上下文?_Qt_Webkit_Qtwebkit - Fatal编程技术网

QtWebkit:如何将异常从Qt发送到JavaScript上下文?

QtWebkit:如何将异常从Qt发送到JavaScript上下文?,qt,webkit,qtwebkit,Qt,Webkit,Qtwebkit,我有一个简单的Qt4.7应用程序,它使用QtWebKit显示HTML/JavaScript页面。使用代码> AdtoJavaScript(Word/ObjutsObjor)/COD> >在JavaScript环境中提供了几个C++函数。 在某些情况下,当从JavaScript调用此类函数时,是否有方法在JavaScript上下文中引发异常 抛出C++异常,如抛掷123;,只会使Qt应用程序崩溃 使用evaluateJavaScript(“throw new Error('whatever');

我有一个简单的Qt4.7应用程序,它使用QtWebKit显示HTML/JavaScript页面。使用<>代码> AdtoJavaScript(Word/ObjutsObjor)/COD> >在JavaScript环境中提供了几个C++函数。 在某些情况下,当从JavaScript调用此类函数时,是否有方法在JavaScript上下文中引发异常

    抛出C++异常,如<代码>抛掷123;<代码>,只会使Qt应用程序崩溃
  • 使用
    evaluateJavaScript(“throw new Error('whatever');”)
    我可以抛出一个异常,但显然它并没有被传递到调用的JavaScript上下文(即,只有
    eval()
    代码本身被中止)
查看源代码,我看到了类似于
setException()
和类似的方法,但显然我需要一个JSContext或其他一些对调用JavaScript上下文的引用,但我不知道如何获取它(虽然WebKit本身或
QWebFramePrivate
似乎有这样一个参考,但是
QWebFramePrivate
中没有这样的东西

我的最终目标是,像

try {
  specialBrowserObject.someFunction();
} catch (e) {
  document.write("Exception: "+e.message);
}

显示C++中创建的异常(AuthBurrServices < /Cord>)是通过 AdtoJavaScript(Word/ObjutsObjor)/代码>公开的对象。


“我想知道,从C++中排除一个异常是不可能的,因为JavaScript中有一个异常。我可以提出一些解决办法,但是这些可能是,或者可能不是,是适合你的解决方案。我意识到这两个都不是你希望的完美解决方案。” < P > 1)使用<代码> QyFalth >以便C++代码可以在返回JavaScript时引发异常。如果需要从CC++函数返回一个异常,然后手动抛出一个异常,JavaScript必须检查该值。 2) 按照同样的思路,但在我看来,更简洁的做法是使用
Q_可调用的
函数将QString返回到JavaScript。如果字符串不是空的,则从JavaScript引发异常

该函数将在头文件中定义为-

Q_INVOKABLE QString someFunction( int divisor );
在主cpp文件中,函数应该是沿着这些行的-

QString className::someFunction( int divisor ) {
  // Main body of function doing various things
  ...
  ...
  // Do we need to throw an exception?
  if( divisor == 0 )
    return "Divide by zero";
  ...
  ...
  // Function has succeeded so no need to throw an exception
  return "";
}
JavaScript看起来像这样-

try {
  retVal = specialBrowserObject.someFunction( divisor );
  if( retVal != "" )
    throw new Error( retVal );
} catch (e) {
  document.write("Exception: "+e.message);
}

我希望这会有所帮助。

我可以编写一个JavaScript包装来检查函数返回值,因此第二个解决方案是一个选项。但是,函数本身应该返回一个值,因此我需要一种不同的方法来传递异常信息(例如,一个函数应该读取并返回一个文件,请参阅)。至于 QyFalth解决方案:这是一个可以从C++和JavaScript中访问的字符串属性吗?您需要定义QAY属性、C++变量和帮助函数来读取变量。code>Q_属性(QString异常String READ GetException),
QString异常
qstringgetexception()常量{returnexception;}
。您可以在C++中设置异常字符串,并使用JavaScript PrExcess使用AuthBurServObjut.ExtryString访问它。这个解决方案有效。我编写了一个包装器,它以类似的方式通过异常,并且运行良好。