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 }
ImageDataPtr CountPixel::startHandle(ImageDataPtr src1, const ImageDataPtr) { QScriptEngine engine; QString originalQuery = m_listParameters[SCRIPT]->toString(); unsigned long long int total = 0; auto lambda = [&total, &originalQuery, &engine](unsigned char & r, unsigned char & b, unsigned char & g) { QString query = originalQuery; query.replace("Gr", QString::number(0.33*b + 0.56*g + 0.11*r) ); query.replace("B", QString::number(b) ); query.replace("G", QString::number(g) ); query.replace("R", QString::number(r) ); if( ! engine.canEvaluate(query) ) total = -1; QScriptValue value = engine.evaluate(query); total += value.toBool(); }; src1->forEachPixel( lambda); src1->addResults( m_listParameters[NAME]->toString(), total); return src1; }
bool ScriptDialog::checkScript() { const QString script = trimmedScript(); if (script.isEmpty()) return true; QScriptEngine scriptEngine; if (scriptEngine.canEvaluate(script)) return true; QMessageBox::warning (this, windowTitle(), tr("Syntax error")); return false; }
bool ScriptDialog::checkScript() { const QString script = trimmedScript(); if (script.isEmpty()) return true; QScriptEngine scriptEngine; if (scriptEngine.canEvaluate(script)) return true; m_dialogGui->message(this, QDesignerDialogGuiInterface::ScriptDialogMessage, QMessageBox::Warning, windowTitle(), tr("Syntax error"), QMessageBox::Ok); return false; }
int main(int argc, char *argv[]) { if(argc<3) { printf("%s file.ui file.js\n",argv[0]); return 0; } QApplication app(argc, argv); QScriptEngine engine; QUiLoader loader; QFile file(argv[1]); file.open(QFile::ReadOnly); QWidget *formWidget = loader.load(&file); file.close(); QScriptValue scriptWidget = engine.newQObject(formWidget); engine.globalObject().setProperty("widget", scriptWidget); QFile ifile(argv[2]); ifile.open(QFile::ReadOnly); QByteArray code=ifile.readAll(); ifile.close(); if( !engine.canEvaluate(code) ) { printf("Error\n"); return 1; } engine.evaluate("widget.show()"); QScriptValue result = engine.evaluate(code); if (engine.hasUncaughtException()) { int line = engine.uncaughtExceptionLineNumber(); qDebug() << "uncaught exception at line" << line << ":" << result.toString(); } return app.exec(); }
QList<BookmarksModel::Bookmark> ChromeImporter::exportBookmarks() { QList<BookmarksModel::Bookmark> list; QString bookmarks = QString::fromUtf8(m_file.readAll()); m_file.close(); QStringList parsedBookmarks; QRegExp rx("\\{(\\s*)\"date_added(.*)\"(\\s*)\\}", Qt::CaseSensitive); rx.setMinimal(true); int pos = 0; while ((pos = rx.indexIn(bookmarks, pos)) != -1) { parsedBookmarks << rx.cap(0); pos += rx.matchedLength(); } QScriptEngine* scriptEngine = new QScriptEngine(); foreach(QString parsedString, parsedBookmarks) { parsedString = "(" + parsedString + ")"; if (scriptEngine->canEvaluate(parsedString)) { QScriptValue object = scriptEngine->evaluate(parsedString); QString name = object.property("name").toString(); QUrl url = QUrl::fromEncoded(object.property("url").toString().toUtf8()); if (name.isEmpty() || url.isEmpty()) { continue; } BookmarksModel::Bookmark b; b.folder = "Chrome Import"; b.title = name; b.url = url; list.append(b); } else { m_error = true; m_errorString = BookmarksImportDialog::tr("Cannot evaluate JSON code."); } }
void NewExperimentSettingsDialog::FormulaCheck() { if (ui->tFormulaInput->toPlainText()=="") { QMessageBox::about(this,"Ошибка", QString("<p><h3>Отсутствует формула</h3></p>")); return; } if (haswronWaribles) { QMessageBox::about(this,"Ошибка", QString("<p><h3>Введёная формула содержит неверные имена переменных</h3></p>")+ QString("<p><b> Описание ошибки: <i>Проверьте синтаксис или воспользуйтесь справкой</i></b></p>")+ QString("<p><b>Строка: 1")+ QString("; Столбец: ")+QString::number(wrongpos)+QString("</p>") + QString(this->EvaluateString.left(wrongpos-1)+"<font color=red>"+this->EvaluateString.at(wrongpos-1)+"</font>"+this->EvaluateString.right(this->EvaluateString.length()-wrongpos))); return; } if (!allowPsevdonamesForVaribles) { QVector<int> Xnumbers; for (int i=0;i<FactorNames.count();i++) { QString tmp= FactorNames.at(i); tmp=tmp.toLower().remove("x"); Xnumbers.append(tmp.toInt()); } qSort(Xnumbers); if (Xnumbers.at(0)!=1) { QMessageBox::about(this,"Ошибка",QString("<p><h3>Введёная формула содержит не все переменные</h3></p>")+ QString("<p><b> Описание ошибки: <i>Отсутствует переменная <font color=red>x1</font></i></b></p>")); return; } for (int i=0;i<Xnumbers.count()-1;i++) { if (Xnumbers.at(i+1)>data.FactNum) { QMessageBox::about(this,"Ошибка",QString("<p><h3>Введённая формула содержит переменные, отсутствующие в настройках плана эксперимента</h3></p>")+ QString("<p><b> Описание ошибки: <i>Отсутствует переменная <font color=red>x"+QString::number(Xnumbers.at(i)+1)+"</font></i></b></p>")); return; } if (Xnumbers.at(i)!=Xnumbers.at(i+1)-1) { QMessageBox::about(this,"Ошибка",QString("<p><h3>Введёная формула содержит не все переменные</h3></p>")+ QString("<p><b> Описание ошибки: <i>Отсутствует переменная <font color=red>x"+QString::number(Xnumbers.at(i)+1)+"</font></i></b></p>")); return; } }// int FactsInFormula=GetExpressionFactorNames(this->EvaluateString).count(); if (data.FactNum>FactsInFormula) { QMessageBox::about(this,"Ошибка",QString("<p><h3>Не все переменные присутствуют в функциональной зависимости</h3></p>")); return; } } QScriptEngine RunScript; QScriptSyntaxCheckResult ErrVal=RunScript.checkSyntax(this->EvaluateString); // Проверка синтаксиса введёной функции if (ErrVal.state()== QScriptSyntaxCheckResult::Valid) { // syntax correct // Проверка количества введёных факторов if (this->data.FactNum<2) { QMessageBox::about(this,"Ошибка",QString("<p><h3>Введёная формула содержит менее двух переменных</h3></p>")+ QString("<p><b> Описание ошибки: <i>Данная программа разработана для работы с формулами, содержащими более одной переменной</i></b></p>")); } else if (!RunScript.canEvaluate(this->EvaluateString)) { QMessageBox::about(this,"Ошибка",QString("<p><h3>Невозможно вычислить введёную формулу</h3></p>")+ QString("<p><b> Описание ошибки: <i>Проверьте синтаксис или воспользуйтесь справкой</i></b></p>")); } else if (saveFactValues()) { close(); } } else { // syntax not correct QString tmp_formula = this->EvaluateString; int ErrColum=0,ErrLine=0; if (ErrVal.errorColumnNumber()<1) ErrColum=1; else ErrColum= ErrVal.errorColumnNumber(); if (ErrVal.errorLineNumber()<1) ErrLine=0; else ErrLine=ErrVal.errorLineNumber(); QMessageBox::about(this,"Ошибка", QString("<p><h3>Введёная формула содержит ошибки</h3></p>")+ QString("<p><b> Описание ошибки: <i>"+tr(ErrVal.errorMessage().toLatin1())+"</i></b></p>")+ QString("<p><b>Строка: ")+QString::number(ErrLine)+ QString("; Столбец: ")+QString::number(ErrColum)+QString("</p>")+ QString(tmp_formula.left(ErrColum-1)+"<font color=red>"+tmp_formula.at(ErrColum-1)+"</font>"+tmp_formula.right(tmp_formula.length()-ErrColum))); } }