Предложение по доработке: Поддержка QtScript
Добавлено: 04 май 2009, 23:20
Сегодня прочел в книге о QT , что с версии 4,3 в QT присутствует аналог MS VBA встроенный скриптовый язык QT Script. По синтаксису он очень напоминает Java Script и, насколько я успел понять, очень легок в освоении. Самое главное, его поддержку можно легко активировать в своем приложении без написания уймы кода. Для того чтобы классы приложения были доступны в QtScript следует объявить публичные методы как слоты и в объявление класса добавить макросы Q_PROPERTY для этих методов в виде
С версии QT4.5 в модуль QtScript встроенный дебаггеркоторый можно использовать для отлова ошибок. Редактировать код в запущенном виде как в VBA нельзя, но зато можно пошагово выполнить скрипт и посмотреть значения переменных для определения места где была допущена ошибка.
Сразу возник вопрос , а почему в QGis нет поддержки скриптов, QtScript ведь их в отличии от Python можно писать и запускать налету. Я думаю, что это отличный вариант для написания одноразовых программ, которые бессмысленно реализовывать виде плагина
Пример кода на QtScript
Код: Выделить всё
Q_PROPERTY ("тип возвращаемых данных" "имя метода" READ "имя метода возвращающего значение" WRITE "имя метода записывающего значение")
например : Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
Сразу возник вопрос , а почему в QGis нет поддержки скриптов, QtScript ведь их в отличии от Python можно писать и запускать налету. Я думаю, что это отличный вариант для написания одноразовых программ, которые бессмысленно реализовывать виде плагина
Пример кода на QtScript
Код: Выделить всё
Calculator.prototype.additiveOperatorClicked = function()
{
var operand = this.ui.display.text - 0;
if (this.pendingMultiplicativeOperator.length != 0) {
if (!this.calculate(operand, this.pendingMultiplicativeOperator)) {
this.abortOperation();
return;
}
this.ui.display.text = this.factorSoFar + "";
operand = this.factorSoFar;
this.factorSoFar = 0;
this.pendingMultiplicativeOperator = "";
}
if (this.pendingAdditiveOperator.length != 0) {
if (!this.calculate(operand, this.pendingAdditiveOperator)) {
this.abortOperation();
return;
}
this.ui.display.text = this.sumSoFar + "";
} else {
this.sumSoFar = operand;
}
this.pendingAdditiveOperator = __qt_sender__.text;
this.waitingForOperand = true;
}