本文整理汇总了C++中QScriptEngine::uncaughtException方法的典型用法代码示例。如果您正苦于以下问题:C++ QScriptEngine::uncaughtException方法的具体用法?C++ QScriptEngine::uncaughtException怎么用?C++ QScriptEngine::uncaughtException使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QScriptEngine
的用法示例。
在下文中一共展示了QScriptEngine::uncaughtException方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
if ( argc < 3 )
{
qDebug("not enough arguments");
return 1;
}
QFile f(argv[1]);
if ( !f.open(QFile::ReadOnly | QFile::Text) )
{
qDebug("Unable to open assembler script file.");
return 1;
}
QScriptEngine engine;
QScriptValue v = engine.evaluate(QString::fromLocal8Bit(f.readAll()), f.fileName(), 1);
if ( engine.hasUncaughtException() )
{
qDebug("Uncaught exception while loading assembler script at line %i: %s",
engine.uncaughtExceptionLineNumber(),
qPrintable(engine.uncaughtException().toString())
);
return 2;
}
f.close();
f.setFileName(argv[2]);
if ( !f.open(QFile::ReadOnly | QFile::Text) )
{
qDebug("Unable to open source file.");
return 1;
}
engine.globalObject().setProperty("source", engine.newVariant(QString::fromLocal8Bit(f.readAll())));
engine.globalObject().setProperty("reloc", engine.newVariant(argc > 3 ? QString::fromLocal8Bit(argv[3]) : "0x0000"));
QScriptValue r = engine.evaluate("assemble(source, reloc)");
if ( engine.hasUncaughtException() )
{
qDebug("Uncaught exception while assembling file at line %i: %s",
engine.uncaughtExceptionLineNumber(),
qPrintable(engine.uncaughtException().toString())
);
return 3;
}
qDebug("%s", qPrintable(r.toString()));
return 0;
}
示例2: main
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QScriptEngine engine;
QFile scriptFile(":/object.js");
scriptFile.open(QFile::ReadOnly);
engine.evaluate(scriptFile.readAll());
scriptFile.close();
QTextEdit editor;
QTimer timer;
QScriptValue constructor = engine.evaluate("Object");
QScriptValueList arguments;
arguments << engine.newQObject(&timer);
arguments << engine.newQObject(&editor);
QScriptValue object = constructor.construct(arguments);
if (engine.hasUncaughtException()) {
qDebug() << engine.uncaughtException().toString();
}
editor.show();
timer.start(1000);
return app.exec();
}
示例3: main
int main(int argc, char **argv)
{
Q_INIT_RESOURCE(rtfedit);
QApplication app(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QScriptEngine engine;
QFile scriptFile(":/rtfedit.js");
scriptFile.open(QIODevice::ReadOnly);
engine.evaluate(QObject::tr(scriptFile.readAll()));
scriptFile.close();
RTFUiLoader loader;
QFile uiFile(":/rtfedit.ui");
uiFile.open(QIODevice::ReadOnly);
QWidget *ui = loader.load(&uiFile);
uiFile.close();
QScriptValue func = engine.evaluate("RTF");
QScriptValue scriptUi = engine.newQObject(ui);
QScriptValue table = func.construct(QScriptValueList() << scriptUi);
if(engine.hasUncaughtException()) {
QScriptValue value = engine.uncaughtException();
QString lineNumber = QString("\nLine Number:%1\n").arg(engine.uncaughtExceptionLineNumber());
QStringList btList = engine.uncaughtExceptionBacktrace();
QString trace;
for(short i=0; i<btList.size(); ++i)
trace += btList.at(i);
QMessageBox::information(NULL, QObject::tr("Exception"), value.toString() + lineNumber + trace );
}
ui->show();
return app.exec();
}
示例4: parseJson
QVariant JsonTranslationService::parseJson(const QByteArray &json)
{
#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
QString js;
js.reserve(json.size() + 2);
js.append("(").append(QString::fromUtf8(json)).append(")");
static QScriptEngine engine;
if (!engine.canEvaluate(js)) {
m_error = tr("Couldn't parse response from the server because of an error: \"%1\"")
.arg(tr("Can't evaluate JSON data"));
return QVariant();
}
QScriptValue data = engine.evaluate(js);
if (engine.hasUncaughtException()) {
m_error = tr("Couldn't parse response from the server because of an error: \"%1\"")
.arg(engine.uncaughtException().toString());
return QVariant();
}
return data.toVariant();
#else
QJsonParseError err;
QJsonDocument doc = QJsonDocument::fromJson(json, &err);
if (err.error != QJsonParseError::NoError) {
m_error = tr("Couldn't parse response from the server because of an error: \"%1\"")
.arg(err.errorString());
return QVariant();
}
return doc.toVariant();
#endif
}
示例5: World
World *ScriptEvaluator::evaluate(const QString &script)
{
QScriptEngine engine;
World* world = new World();
QScriptValue worldValue = engine.newQObject(world);
engine.globalObject().setProperty("world", worldValue);
QScriptValue directionalLightClass = engine.scriptValueFromQMetaObject<DirectionalLight>();
engine.globalObject().setProperty("DirectionalLight", directionalLightClass);
engine.evaluate(script);
if (engine.hasUncaughtException())
{
QMessageBox messageBox;
messageBox.setIcon(QMessageBox::Warning);
messageBox.setWindowTitle("Script error");
messageBox.setText("An error occurred while executing the script.");
messageBox.setInformativeText(engine.uncaughtException().toString());
messageBox.setDetailedText(engine.uncaughtExceptionBacktrace().join("\n"));
messageBox.exec();
return 0;
}
return world;
}
示例6: qt_metacall
int tst_Suite::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QObject::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
QString name = testNames.at(_id);
QString path = testsDir.absoluteFilePath(name + ".js");
QString excludeMessage;
if (isExcludedTest(name, &excludeMessage)) {
QTest::qSkip(excludeMessage.toLatin1(), QTest::SkipAll, path.toLatin1(), -1);
} else {
QScriptEngine engine;
engine.evaluate(mjsunitContents).toString();
if (engine.hasUncaughtException()) {
QStringList bt = engine.uncaughtExceptionBacktrace();
QString err = engine.uncaughtException().toString();
qWarning("%s\n%s", qPrintable(err), qPrintable(bt.join("\n")));
} else {
QScriptValue fakeFail = engine.newFunction(qscript_fail);
fakeFail.setData(engine.globalObject().property("fail"));
engine.globalObject().setProperty("fail", fakeFail);
QString contents = readFile(path);
QScriptValue ret = engine.evaluate(contents);
if (engine.hasUncaughtException()) {
if (!ret.isError()) {
Q_ASSERT(ret.instanceOf(engine.globalObject().property("MjsUnitAssertionError")));
QString actual = ret.property("actual").toString();
QString expected = ret.property("expected").toString();
int lineNumber = ret.property("lineNumber").toInt32();
QString failMessage;
if (isExpectedFailure(name, actual, expected, &failMessage)) {
QTest::qExpectFail("", failMessage.toLatin1(),
QTest::Continue, path.toLatin1(),
lineNumber);
}
#ifdef GENERATE_ADDEXPECTEDFAILURE_CODE
else {
generatedAddExpectedFailureCode.append(
" addExpectedFailure(\"" + name
+ "\", \"" + actual + "\", \"" + expected
+ "\", willFixInNextReleaseMessage);\n");
}
#endif
QTest::qCompare(actual, expected, "actual", "expect",
path.toLatin1(), lineNumber);
} else {
int lineNumber = ret.property("lineNumber").toInt32();
QTest::qExpectFail("", ret.toString().toLatin1(),
QTest::Continue, path.toLatin1(), lineNumber);
QTest::qVerify(false, ret.toString().toLatin1(), "", path.toLatin1(), lineNumber);
}
}
}
}
_id -= testNames.size();
}
return _id;
}
示例7: qWarning
void tst_QScriptV8TestSuite::runTestFunction(int testIndex)
{
QString name = testNames.at(testIndex);
QString path = testsDir.absoluteFilePath(name + ".js");
QString excludeMessage;
if (isExcludedTest(name, &excludeMessage)) {
QTest::qSkip(excludeMessage.toLatin1(), path.toLatin1(), -1);
return;
}
QScriptEngine engine;
engine.evaluate(mjsunitContents);
if (engine.hasUncaughtException()) {
QStringList bt = engine.uncaughtExceptionBacktrace();
QString err = engine.uncaughtException().toString();
qWarning("%s\n%s", qPrintable(err), qPrintable(bt.join("\n")));
} else {
// Prepare to intercept calls to mjsunit's fail() function.
QScriptValue fakeFail = engine.newFunction(qscript_fail);
fakeFail.setData(engine.globalObject().property("fail"));
engine.globalObject().setProperty("fail", fakeFail);
QString contents = readFile(path);
QScriptValue ret = engine.evaluate(contents);
if (engine.hasUncaughtException()) {
if (!ret.isError()) {
int lineNumber = ret.property("lineNumber").toInt32();
QTest::qVerify(ret.instanceOf(engine.globalObject().property("MjsUnitAssertionError")),
ret.toString().toLatin1(),
"",
path.toLatin1(),
lineNumber);
QString actual = ret.property("actual").toString();
QString expected = ret.property("expected").toString();
QString failMessage;
if (shouldGenerateExpectedFailures) {
if (ret.property("message").isString())
failMessage = ret.property("message").toString();
addExpectedFailure(name, actual, expected, failMessage);
} else if (isExpectedFailure(name, actual, expected, &failMessage)) {
QTest::qExpectFail("", failMessage.toLatin1(),
QTest::Continue, path.toLatin1(),
lineNumber);
}
QTest::qCompare(actual, expected, "actual", "expect",
path.toLatin1(), lineNumber);
} else {
int lineNumber = ret.property("lineNumber").toInt32();
QTest::qExpectFail("", ret.toString().toLatin1(),
QTest::Continue, path.toLatin1(), lineNumber);
QTest::qVerify(false, ret.toString().toLatin1(), "", path.toLatin1(), lineNumber);
}
}
}
}
示例8: handleException
void handleException() {
Q_ASSERT( m_engine );
Q_ASSERT( m_engine->hasUncaughtException() );
const QString err = m_engine->uncaughtException().toString();
const int linenr = m_engine->uncaughtExceptionLineNumber();
const QString trace = m_engine->uncaughtExceptionBacktrace().join("\n");
qrossdebug( QString("%1, line:%2, backtrace:\n%3").arg(err).arg(linenr).arg(trace) );
m_script->action()->setError(err, trace, linenr);
m_engine->clearExceptions();
}
示例9: accept
void FormulaDialog::accept()
{
QScriptEngine eng;
QString exp = ui->formula->text();
exp.replace("%1", "%%1");
exp.replace("%n", "%1");
eng.evaluate(exp.arg(10));
if(eng.hasUncaughtException())
{
Utils::showErrorBox(tr("There is an error in the formula, following exception was thrown:\n\n%1")
.arg(eng.uncaughtException().toString()));
return;
}
QDialog::accept();
}
示例10: hadUncaughtExceptions
static bool hadUncaughtExceptions(QScriptEngine& engine, const QString& fileName) {
if (engine.hasUncaughtException()) {
const auto backtrace = engine.uncaughtExceptionBacktrace();
const auto exception = engine.uncaughtException().toString();
const auto line = QString::number(engine.uncaughtExceptionLineNumber());
engine.clearExceptions();
auto message = QString("[UncaughtException] %1 in %2:%3").arg(exception, fileName, line);
if (!backtrace.empty()) {
static const auto lineSeparator = "\n ";
message += QString("\n[Backtrace]%1%2").arg(lineSeparator, backtrace.join(lineSeparator));
}
qWarning() << qPrintable(message);
return true;
}
return false;
}
示例11: main
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
QScriptEngine engine;
QFile f(app.applicationDirPath() + "/calculator.js");
f.open(QFile::ReadOnly);
QString theProgram = QTextStream(&f).readAll();
theProgram += "calculate('1/0');";
qDebug() << engine.evaluate(theProgram, "calculator.js").toNumber();
qDebug() << "Error?" << engine.hasUncaughtException();
qDebug() << engine.uncaughtException().property("message").toString();
qDebug() << "On line number" << engine.uncaughtExceptionLineNumber();
qDebug() << "Backtrace: " << engine.uncaughtExceptionBacktrace();
}
示例12: execute
bool JSScript::execute(TWScriptAPI *tw) const
{
QFile scriptFile(m_Filename);
if (!scriptFile.open(QIODevice::ReadOnly)) {
// handle error
return false;
}
QTextStream stream(&scriptFile);
stream.setCodec(m_Codec);
QString contents = stream.readAll();
scriptFile.close();
QScriptEngine engine;
QScriptValue twObject = engine.newQObject(tw);
engine.globalObject().setProperty("TW", twObject);
QScriptValue val;
#if QT_VERSION >= 0x040500
QSETTINGS_OBJECT(settings);
if (settings.value("scriptDebugger", false).toBool()) {
QScriptEngineDebugger debugger;
debugger.attachTo(&engine);
val = engine.evaluate(contents, m_Filename);
}
else {
val = engine.evaluate(contents, m_Filename);
}
#else
val = engine.evaluate(contents, m_Filename);
#endif
if (engine.hasUncaughtException()) {
tw->SetResult(engine.uncaughtException().toString());
return false;
}
else {
if (!val.isUndefined()) {
tw->SetResult(convertValue(val));
}
return true;
}
}
示例13: accept
void ScriptForm::accept()
{
m_script = textEdit->toPlainText();
QScriptEngine javaScriptParser;
int errorLineNumber = 0;
QString errorMessage;
#if QT_VERSION >= 0x040500
QScriptSyntaxCheckResult syntaxResult =
javaScriptParser.checkSyntax(m_script);
if (syntaxResult.state() != QScriptSyntaxCheckResult::Valid) {
errorLineNumber = syntaxResult.errorLineNumber();
errorMessage = syntaxResult.errorMessage();
if (errorMessage.isEmpty())
errorMessage = tr("Syntax Error");
}
#else
QScriptValue value(&javaScriptParser, 0);
javaScriptParser.globalObject().setProperty("cellRow", value);
javaScriptParser.globalObject().setProperty("cellColumn", value);
javaScriptParser.globalObject().setProperty("cellValue", value);
QScriptValue result = javaScriptParser.evaluate(m_script);
if (javaScriptParser.hasUncaughtException()) {
errorLineNumber = javaScriptParser
.uncaughtExceptionLineNumber();
errorMessage = javaScriptParser.uncaughtException()
.toString();
}
#endif
if (!errorMessage.isEmpty()) {
AQP::warning(this, tr("Error"),
tr("Invalid script on line %1:\n%2")
.arg(errorLineNumber).arg(errorMessage));
QTextCursor cursor = textEdit->textCursor();
cursor.clearSelection();
cursor.movePosition(QTextCursor::Start);
cursor.movePosition(QTextCursor::Down,
QTextCursor::MoveAnchor, errorLineNumber - 1);
cursor.select(QTextCursor::LineUnderCursor);
textEdit->setTextCursor(cursor);
}
else
QDialog::accept();
}
示例14: main
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
QTextStream err(stderr);
QStringList arguments = app.arguments();
if( arguments.length() < 2 )
{
err << QString("USAGE: %1 <script>\n").arg(arguments[0]);
return 1;
}
QScriptEngine engine;
engine.globalObject().setProperty("createServer", engine.newFunction(createServer));
QFile file(arguments[1]);
if( !file.open(QFile::ReadOnly) )
{
err << QString("Error opening %1: %2\n").arg(arguments[1]).arg(file.errorString());
return 2;
}
QTextStream reader(&file);
engine.evaluate(reader.readAll(), arguments[1]);
if( engine.hasUncaughtException() )
{
err << "Exception\n";
err << engine.uncaughtException().property("message").toString() << "\n";
err << "On line number " << engine.uncaughtExceptionLineNumber() << "\n";
err << "Backtrace:\n";
foreach(QString s, engine.uncaughtExceptionBacktrace())
err << " " << s << "\n";
return 3;
}
app.exec();
}
示例15: run
void ScriptJob::run()
{
m_mutex->lock();
if ( !loadScript(&m_data.program) ) {
kDebug() << "Script could not be loaded correctly";
m_mutex->unlock();
return;
}
QScriptEngine *engine = m_engine;
ScriptObjects objects = m_objects;
m_mutex->unlock();
// Store start time of the script
QElapsedTimer timer;
timer.start();
// Add call to the appropriate function
QString functionName;
QScriptValueList arguments = QScriptValueList() << request()->toScriptValue( engine );
switch ( request()->parseMode() ) {
case ParseForDepartures:
case ParseForArrivals:
functionName = ServiceProviderScript::SCRIPT_FUNCTION_GETTIMETABLE;
break;
case ParseForJourneysByDepartureTime:
case ParseForJourneysByArrivalTime:
functionName = ServiceProviderScript::SCRIPT_FUNCTION_GETJOURNEYS;
break;
case ParseForStopSuggestions:
functionName = ServiceProviderScript::SCRIPT_FUNCTION_GETSTOPSUGGESTIONS;
break;
case ParseForAdditionalData:
functionName = ServiceProviderScript::SCRIPT_FUNCTION_GETADDITIONALDATA;
break;
default:
kDebug() << "Parse mode unsupported:" << request()->parseMode();
break;
}
if ( functionName.isEmpty() ) {
// This should never happen, therefore no i18n
handleError( "Unknown parse mode" );
return;
}
// Check if the script function is implemented
QScriptValue function = engine->globalObject().property( functionName );
if ( !function.isFunction() ) {
handleError( i18nc("@info/plain", "Function <icode>%1</icode> not implemented by "
"the script", functionName) );
return;
}
// Call script function
QScriptValue result = function.call( QScriptValue(), arguments );
if ( engine->hasUncaughtException() ) {
// TODO Get filename where the exception occured, maybe use ScriptAgent for that
handleError( i18nc("@info/plain", "Error in script function <icode>%1</icode>, "
"line %2: <message>%3</message>.",
functionName, engine->uncaughtExceptionLineNumber(),
engine->uncaughtException().toString()) );
return;
}
GlobalTimetableInfo globalInfo;
globalInfo.requestDate = QDate::currentDate();
globalInfo.delayInfoAvailable = !objects.result->isHintGiven( ResultObject::NoDelaysForStop );
// The called function returned, but asynchronous network requests may have been started.
// Wait for all network requests to finish, because slots in the script may get called
if ( !waitFor(objects.network.data(), SIGNAL(allRequestsFinished()), WaitForNetwork) ) {
return;
}
// Wait for script execution to finish
ScriptAgent agent( engine );
if ( !waitFor(&agent, SIGNAL(scriptFinished()), WaitForScriptFinish) ) {
return;
}
// Update last download URL
QMutexLocker locker( m_mutex );
m_lastUrl = objects.network->lastUrl(); // TODO Store all URLs
m_lastUserUrl = objects.network->lastUserUrl();
// Inform about script run time
DEBUG_ENGINE_JOBS( "Script finished in" << (timer.elapsed() / 1000.0)
<< "seconds: " << m_data.provider.scriptFileName() << request()->parseMode() );
// If data for the current job has already been published, do not emit
// xxxReady() with an empty resultset
if ( m_published == 0 || m_objects.result->count() > m_published ) {
const bool couldNeedForcedUpdate = m_published > 0;
const MoreItemsRequest *moreItemsRequest =
dynamic_cast< const MoreItemsRequest* >( request() );
const AbstractRequest *_request =
moreItemsRequest ? moreItemsRequest->request().data() : request();
switch ( _request->parseMode() ) {
case ParseForDepartures:
//.........这里部分代码省略.........