Предложение по доработке: Поддержка QtScript

Идеи и запросы на отсутствующую или изменение существующей функциональности QGIS, патчи.
Ответить
Dorofeev
Активный участник
Сообщения: 194
Зарегистрирован: 08 фев 2007, 23:29
Репутация: 1
Откуда: Симферополь
Контактная информация:

Предложение по доработке: Поддержка QtScript

Сообщение Dorofeev » 04 май 2009, 23:20

Сегодня прочел в книге о QT , что с версии 4,3 в QT присутствует аналог MS VBA встроенный скриптовый язык QT Script. По синтаксису он очень напоминает Java Script и, насколько я успел понять, очень легок в освоении. Самое главное, его поддержку можно легко активировать в своем приложении без написания уймы кода. Для того чтобы классы приложения были доступны в QtScript следует объявить публичные методы как слоты и в объявление класса добавить макросы Q_PROPERTY для этих методов в виде

Код: Выделить всё

Q_PROPERTY ("тип возвращаемых данных" "имя метода" READ "имя метода возвращающего значение"  WRITE "имя метода записывающего значение")
например : Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled) 
С версии QT4.5 в модуль QtScript встроенный дебаггеркоторый можно использовать для отлова ошибок. Редактировать код в запущенном виде как в VBA нельзя, но зато можно пошагово выполнить скрипт и посмотреть значения переменных для определения места где была допущена ошибка.
Сразу возник вопрос , а почему в 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;
 }

stopa85

Re: Предложение по доработке: Поддержка QtScript

Сообщение stopa85 » 05 май 2009, 16:00

Мое мнение, это не очень нужная вещь.

Как бы выразиться пограмотнее... Дело в том, что VBA от микросовт представляет собой интерфейс к COM, т.е из этого скрипта можно вызвать, например, word - засунуть туда красивый отчет и отобразить окно с вордом для дальнейшей правки и редактирования. И так, теоретически, с любой программой.

Если бы в QGIS был бы VBA, то можно было бы из "1C:Предприятие" запустить QGIS и отобразить нужные объекты. Но это только под Windows.

А вот QtScript этого не умеет (вот тут могу ошибиться) и следовательно, у QtScript мало преимуществ перед плагинами на Python'не и С++.

IMHO, конечно.

Dorofeev
Активный участник
Сообщения: 194
Зарегистрирован: 08 фев 2007, 23:29
Репутация: 1
Откуда: Симферополь
Контактная информация:

Re: Предложение по доработке: Поддержка QtScript

Сообщение Dorofeev » 05 май 2009, 16:18

Я думаю, что это отличный вариант для написания одноразовых программ, которые бессмысленно реализовывать виде плагина
Сферу применения я четко обозначил. QtScript - кроссплатформенное решение, тут халявы как от vba ожидать не стоит, главное что его синтаксис стандартизирован в отличии от python , не меняется от версии к версии.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Предложение по доработке: Поддержка QtScript

Сообщение Максим Дубинин » 05 май 2009, 22:58

интересно, как будет выглядить в QTScript что-то вроде такого скрипта, сейчас я просто запускаю это в python console:

Код: Выделить всё

iface.zoomFull()
пристегивайтесь, турбулентность прямо по курсу

Dorofeev
Активный участник
Сообщения: 194
Зарегистрирован: 08 фев 2007, 23:29
Репутация: 1
Откуда: Симферополь
Контактная информация:

Re: Предложение по доработке: Поддержка QtScript

Сообщение Dorofeev » 05 май 2009, 23:12

Вообще зависит от того, что передавать в скрипт. Но если передавать экземпляр класса QgsInterface названный iface, то команда будет идентична. Все равно, даже если интеграция с pythоn будет очень тесная, наличие возможности разработки на еще одном языке минусов Qgis не добавит ;)

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Предложение по доработке: Поддержка QtScript

Сообщение Максим Дубинин » 06 май 2009, 02:23

Я согласен что не добавит. Просто хотелось представить как это выглядит на реальных примерах.
пристегивайтесь, турбулентность прямо по курсу

Dorofeev
Активный участник
Сообщения: 194
Зарегистрирован: 08 фев 2007, 23:29
Репутация: 1
Откуда: Симферополь
Контактная информация:

Re: Предложение по доработке: Поддержка QtScript

Сообщение Dorofeev » 03 авг 2009, 02:24

Знаете, прошло немного времени и я снова задумался о программировании на QTScript в QGis и понял , что это бредовая идея. :oops: QtScript привлекает лишь встроенным дебагерром скриптов. А минусов два , и они все перечеркивают
1 Отсутствие биндингов QtScript к другим библиотекам
2 Отсутствие в чистом QT(QtScript) многих необходимых математических и др. функций

Это предложение можно отсылать в "Отстой" :twisted:

Ответить

Вернуться в «Предложения по QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей