当前位置: 首页>>代码示例>>C++>>正文


C++ QScriptEngine::checkSyntax方法代码示例

本文整理汇总了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();
}
开发者ID:descent,项目名称:qtermwidget,代码行数:43,代码来源:scriptform.cpp

示例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;
	}
开发者ID:ice2heart,项目名称:calc,代码行数:72,代码来源:core.cpp

示例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"
//.........这里部分代码省略.........
开发者ID:mblancomuriel,项目名称:tonatiuh,代码行数:101,代码来源:main.cpp

示例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();
}
开发者ID:niconil,项目名称:actionaz,代码行数:99,代码来源:scriptparametersdialog.cpp

示例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>")+
//.........这里部分代码省略.........
开发者ID:VMPR-21,项目名称:Neydorff,代码行数:101,代码来源:NewExperimentSettingsDialog.cpp


注:本文中的QScriptEngine::checkSyntax方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。