本文整理汇总了C++中QScriptEngine::checkSyntax方法的典型用法代码示例。如果您正苦于以下问题:C++ QScriptEngine::checkSyntax方法的具体用法?C++ QScriptEngine::checkSyntax怎么用?C++ QScriptEngine::checkSyntax使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QScriptEngine
的用法示例。
在下文中一共展示了QScriptEngine::checkSyntax方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: 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();
}
示例2: readyRead
void Core::readyRead()
{
QTcpSocket *socket = (QTcpSocket *) sender();
sConStore conn = mCoreClients[socket];
//Плохо, если кусок будет слишком большой может и не влезть
//но так проще.
QByteArray raw = socket->readAll();
QJsonDocument doc = QJsonDocument::fromJson(raw);
QJsonObject obj = doc.object();
QJsonObject retVal;
if (obj["name"].toString() == "eval")
{
QString data = obj["data"].toString();
//Для вычисление используем qsript
//чтоб не писать свой парсер мат строк
QScriptEngine myEngine;
bool historyReplaceFail = false;
//Заменяем все H\d+ На значения из истории
QRegExp rx("H(\\d+)");
int pos = 0;
while ((pos = rx.indexIn(data)) != -1 && !historyReplaceFail)
{
if (conn->history.contains(rx.cap(1).toInt()))
{
QString value = conn->history.value(rx.cap(1).toInt());
data.replace(pos, rx.matchedLength(), value);
pos += value.length();
}
else
historyReplaceFail = true;
}
QScriptSyntaxCheckResult res = myEngine.checkSyntax(data);
if (historyReplaceFail)
{
error("History replace error "+data);
retVal["name"] = "error";
retVal["text"] = "History replace error";
}
else if (res.state() != QScriptSyntaxCheckResult::Valid)
{
error("error expression "+data);
retVal["name"] = "error";
retVal["text"] = "Error string";
}
else
{
QJsonArray jsonArray;
QJsonObject eResult;
QString result = myEngine.evaluate(data).toString();
int count = conn->addEvalResult(result);
log(QString("Eval %1 result is %2").arg(data, result));
retVal["name"] = "eval_results";
eResult["num"] = count;
eResult["result"] = result;
jsonArray.append(eResult);
retVal["results"] = jsonArray;
}
}
else if (obj["name"].toString() == "get_history")
{
log("Get history request");
QJsonArray jsonArray;
foreach (int num, conn->history.keys()) {
QJsonObject result;
result["num"] = num;
result["result"] = conn->history[num];
jsonArray.append(result);
}
retVal["name"] = "eval_results";
retVal["results"] = jsonArray;
}
示例3: main
int main( int argc, char ** argv )
{
QApplication::setColorSpec( QApplication::CustomColor );
QApplication a( argc, argv );
a.setApplicationVersion( APP_VERSION );
QSplashScreen* splash = new QSplashScreen;
splash->setPixmap( QPixmap(":/icons/tonatiuhsplash.png") );
splash->show();
Qt::Alignment topRight = Qt::AlignRight | Qt::AlignTop;
splash->showMessage(QObject::tr("Loading libraries..."), topRight, Qt::black);
QApplication::addLibraryPath( QApplication::applicationDirPath()
+ QDir::separator() + "marble" );
SoQt::init( (QWidget *) NULL );
//MFVec2::initClass();
UserMField::initClass();
UserSField::initClass();
TSceneKit::initClass();
TMaterial::initClass();
TDefaultMaterial::initClass();
TSeparatorKit::initClass();
TShape::initClass();
TCube::initClass();
TLightShape::initClass();
TShapeKit::initClass();
TAnalyzerKit::initClass();
TAnalyzerResultKit::initClass();
TAnalyzerParameter::initClass();
TAnalyzerResult::initClass();
TAnalyzerLevel::initClass();
TSquare::initClass();
TLightKit::initClass();
TSunShape::initClass();
TDefaultSunShape::initClass();
TTracker::initClass();
TTrackerForAiming::initClass();
TDefaultTracker::initClass();
TSceneTracker::initClass();
GraphicRootTracker::initClass();
TTransmissivity::initClass();
TDefaultTransmissivity::initClass();
splash->showMessage( QObject::tr("Setting up the main window..."), topRight, Qt::black );
QDir pluginsDirectory( qApp->applicationDirPath() );
pluginsDirectory.cd( "plugins" );
PluginManager pluginManager;
pluginManager.LoadAvailablePlugins( pluginsDirectory );
int exit;
if( argc > 1 )
{
QString tonatiuhFile = argv[1];
QFileInfo fileInfo( tonatiuhFile );
if( fileInfo.completeSuffix() == QLatin1String( "tnhs") )
{
QString fileName( argv[1] );
QFileInfo fileInfo( fileName );
QDir testDirectory( fileInfo.absolutePath() );
testDirectory.cd( "." );
QScriptEngine* interpreter = new QScriptEngine;
qScriptRegisterSequenceMetaType<QVector<QVariant> >(interpreter);
MainWindow* mw = new MainWindow( QLatin1String("") );
mw->SetPluginManager( &pluginManager );
QScriptValue tonatiuh = interpreter->newQObject( mw );
interpreter->globalObject().setProperty( "tonatiuh", tonatiuh );
QFile scriptFile( fileName );
if( !scriptFile.open( QIODevice::ReadOnly) )
{
QString errorMessage = QString( "Cannot open file %1." ).arg( fileName );
std::cerr<<errorMessage.toStdString()<<std::endl;
}
QTextStream in( &scriptFile );
QString program = in.readAll();
scriptFile.close();
QScriptSyntaxCheckResult checkResult = interpreter->checkSyntax( program );
if( checkResult.state() != QScriptSyntaxCheckResult::Valid )
{
QString errorMessage = QString( "Script Syntaxis Error.\n"
//.........这里部分代码省略.........
示例4: accept
void ScriptParametersDialog::accept()
{
int rowCount = ui->parameterTable->rowCount();
QScriptEngine scriptEngine;
mScript->removeAllParameters();
for(int row = 0; row < rowCount; ++row)
{
QWidget *widget = ui->parameterTable->cellWidget(row, 0);
if(!widget)
continue;
QLineEdit *nameLineEdit = qobject_cast<QLineEdit *>(widget);
widget = ui->parameterTable->cellWidget(row, 1);
if(!widget)
continue;
if(nameLineEdit->text().isEmpty())
continue;
QRegExp nameRegExp("[a-z_][a-z0-9_]*", Qt::CaseInsensitive);
if(!nameRegExp.exactMatch(nameLineEdit->text()))
{
QMessageBox::warning(this, tr("Script parameter error"), tr("Incorrect parameter name \"%1\".")
.arg(nameLineEdit->text()));
nameLineEdit->setFocus();
return;
}
bool isCode = false;
QString value;
switch(mParameterTypes.at(row))
{
case ActionTools::ScriptParameter::Text:
{
ActionTools::CodeLineEdit *valueWidget = qobject_cast<ActionTools::CodeLineEdit *>(widget);
isCode = valueWidget->isCode();
value = valueWidget->text();
}
break;
case ActionTools::ScriptParameter::Number:
{
ActionTools::CodeSpinBox *valueWidget = qobject_cast<ActionTools::CodeSpinBox *>(widget);
isCode = valueWidget->isCode();
value = valueWidget->text();
}
break;
case ActionTools::ScriptParameter::Window:
{
ActionTools::WindowEdit *valueWidget = qobject_cast<ActionTools::WindowEdit *>(widget);
isCode = valueWidget->isCode();
value = valueWidget->text();
}
break;
case ActionTools::ScriptParameter::File:
{
ActionTools::FileEdit *valueWidget = qobject_cast<ActionTools::FileEdit *>(widget);
isCode = valueWidget->isCode();
value = valueWidget->text();
}
break;
case ActionTools::ScriptParameter::Line:
{
ActionTools::LineComboBox *valueWidget = qobject_cast<ActionTools::LineComboBox *>(widget);
isCode = valueWidget->isCode();
value = valueWidget->codeLineEdit()->text();
}
break;
}
if(isCode)
{
QScriptSyntaxCheckResult result = scriptEngine.checkSyntax(value);
if(result.state() != QScriptSyntaxCheckResult::Valid)
{
QMessageBox::warning(this, tr("Script parameter error"), tr("The script parameter named \"%1\" contains an error: \"%2\", please correct it.")
.arg(nameLineEdit->text())
.arg(result.errorMessage()));
widget->setFocus();
return;
}
}
mScript->addParameter(ActionTools::ScriptParameter(nameLineEdit->text(), value, isCode, mParameterTypes.at(row)));
}
QDialog::accept();
}
示例5: FormulaCheck
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>")+
//.........这里部分代码省略.........