Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: Гурман от Август 09, 2011, 12:25



Название: Нужно быстро изучить QScript
Отправлено: Гурман от Август 09, 2011, 12:25
Нужно срочно изучить QScript, а именно - сам язык, его семантика, устойчивость и быстродействие программ, возможности его расширения, возможности отладки средствами Qt. Это нужно для оценки использования языка для скриптового управления приложением (не Web). Времени мало, поэтому вопросы:

- где подробнее всего описан сам язык?
- где лучше всего описано его использование в приложениях, доступ к объектам приложений?
- где есть готовый собранный редактор с отладчиком (желательно не QtCreator, отдельный), в котором можно было бы поиграться с программами?

если у кого-то есть собранный бинарник для Windows, в котором только QScriptEngineDebugger со стандартным окном - плз, дайте скачать, ну некогда сейчас от основного проекта отвлекаться на его написание, а готовый в примерах не видно

нашел scripttools, пытаюсь собрать - валится куча ошибок, блин, ну некогда со всем этим разбираться  :-[


Название: Re: Нужно быстро изучить QScript
Отправлено: asvil от Август 09, 2011, 13:30
Жэстачайшыя рэалии Ынтерпрайза.
http://javascript.ru/tutorial/foundation

Использование в приложениях можно условно разделить на два вида:
1.
  Создание объекта в cpp коде, предоставление объекта движку.
  Использование объекта в script коде.
2.
  Создание обертки в cpp коде, предоставление обертки движку.
  Создание и использование объектов в script коде.

Отладчик скриптов в вашей программе, реализуется классом QScriptEngineDebugger, который навешивается на движок, и показывает окно отладчика в вашем приложении, как только возникла ошибка в скрипте или команда "debugger".

А так вообще конечно вам нужен assistant.


Название: Re: Нужно быстро изучить QScript
Отправлено: Гурман от Август 09, 2011, 13:49
то, что это разновиность ECMAscript, я и так знаю, с JScript неплохо знаком - нужно описание именно QScript, чтобы в нем было упомянуто все, что добавлено (если добавлено) и изменено (если изменено) в реализации QScript, чтобы это не выковыривать по крупицам, времени нет

отладчик при ошибке - это значит, что контрольные точки нельзя установить до запуска? Assstant у меня есть, но в нем это все не описано

мне нужен работающий пример с отладчиком, с базовым набором возможностей, собрать его не получается, застрял в ошибках при компиляции исходников из scripttools


Название: Re: Нужно быстро изучить QScript
Отправлено: Denjs от Август 09, 2011, 22:11
у мну есть бинарники QDroid - это не то что бы совсем чистый QtScript - там много всяких объектов добавлено, чуть-чуть препрцессора и некотрых функций которых нет в QtScript но есть в JavaScript (например alert() )

Думаю вы и сами сможете его собрать.
Описания проекта и прочее - смотри по ссылкам в моей подписи.
Документации на сайте особо не верьте - она очень старая.
Берите QDroid_src.rev262.2011.06.09.zip - и поройтесь там в исходниках есть каталоги с документацией - и их там несколько...
Ну а за методами классов - смотрите исходники подгружаемых компонент.

В общем случае вы запускаете "qdroid.exe myscript.qs" и смотрите что там исполняется. Используется отладчик - запускаете скрипт через  "qdroid.exe --debug myscript.qs" и он стопорится на первой строчке - а потом сами выставяете точки останова и прочее.

В приложении - некоторый не совсем хелло-ворд-най QDroid-скрипт, но пример простого интерфейса с помощью html-панели, с загрузкой расширения и взаимодействия с html-панелью. Ну для начала так сказать...

Код:
#!/usr/bin/qdroid
#codepage=utf-8

var webViewPanel;
//===========================================================================
// стандартный QDR-шаблон:
// Загрузка расширения.
//
function TestLibraryLoad(LibName)
{
  var res =0 ;
  var resstr="";
  var __StrPassed__ ="->[V] Passed. :";
  var __StrError__  ="->[X] ERROR! FAILED!  :";
  var __StrWarning__="->[?] Warning.:";

  
  // пробуем загрузить расширение. если не загрузили ранее - должны выдать "0" (ок)
  printout (" LOADING... Library ["+LibName+"].");
  res=loadlib_qd(LibName); // <<----- загружаем расширение
  if (res==0) resstr=__StrPassed__;
  if (res<0) resstr=__StrError__;
  if (res>0) resstr=__StrWarning__;
  printout ("      :: loading result code = ["+res+"]");
  printout ("      :: (-1=error; 0=ok; +1=warnings)");
  printout (""+resstr+"");
  return res;
};

//---------------------------------------------------------------------------
// функция стандлартного шаблона QDR_001.
// в редких случаях полежить ручной правке
//---------------------------------------------------------------------------
// стандартный QDR-шаблон:
// поочередно загружаем все необходимве расширения
//
function loadlibs()
{
  
  if (TestLibraryLoad("qdlib_webview")<0)
     {alert("CAN`T LOAD LIB: qdlib_webview !!! \n EXITING! \n ([00037])"); return -1;};

};

//---------------------------------------------------------------------------
// слот-обработчик сигнала при нажатии
function slot_urlClick(webView, url, navigationType )
{
     var baseurl=BBot.str_splitted_part(webView.baseUrl().toString(),"#",0);//если у нас якорь в baseUrl - уберем его
     var cUrlClean=url.toString();
    
     //отсечем хвосты добавляемые движком при навигации...
     if (BBot.str_starts_with(url, baseurl))
        cUrlClean=BBot.str_mid(cUrlClean, baseurl.length);
        
    if (  (BBot.str_starts_with(cUrlClean,"#")==true) || (BBot.str_starts_with(cUrlClean,"about:blank#")==true)  )
        {  //just ignore it - looks like this is a JavaScript activation via <a href="#" onClick="...."> or innerpage navigation
           // our "run-links" have to be started from "QDR" or "QDR:DO:"
           return 0;
        };
        
    if (cUrlClean=="URLCLICK1")
      {
        alert(" URLCLICK1 clicked!" );
        webViewPanel.setElementInnerHTML("#area1", " URLCLICK1 clicked!. Value1 = "+webViewPanel.getElementValue("#value1"));
        return true;      
      };    
}

//---------------------------------------------------------------------------
function main()
{
  if (loadlibs()<0) return -1;
  
    htmlRep="<html>Hello world!<br>\
             <input id='value1' maxlength='10' size='10' type='text'><a href='URLCLICK1'>show value and alert !</a>\
             <div id='area1' style=''></div><br> \
             <hr> QDroid version: "+ BBot.getPlatformVersion()+"</html>";
    
    webViewPanel= new WebView(); //менеджер форм печати, мастер печати и др.
    //webViewPanel.evaluate.connect(slot_evaluate);//запрос со страницы на исполнение какого-либо выражения
    webViewPanel.urlClick.connect(slot_urlClick);
    //webViewPanel.reloadSection.connect(slot_reloadSection);
    webViewPanel.setButtonsVisible(false);
    webViewPanel.show(htmlRep,"file:///"+BBot.scriptDirPath()+"resources/");// сначала надо подключиться - а потом показываться. потому что тут затармаживаемся
  
    printout ("Hello world started");//это уйдет на самом деле в лог. так сейчас сделано.


  return "All Ok";
  //exit(); //QDroid функция завершения работы системы "вообще".

}//end of main()
//===========================================================================

//require(pathToGlobalInclude+"qdr_stdTestLib.001.qsi"); //наш собственный вариант подключения внешних файлов.


main();


Название: Re: Нужно быстро изучить QScript
Отправлено: Гурман от Август 10, 2011, 00:32
пока что обошелся слегка модифицированным калькулятором из qt\examples\script\calculator - там все есть, только там под один файл скрипта код ориентирован, просто добавил загрузку файла из argv[], текстовый редактор сторонний, с поддержкой JScript, пока этого достаточно