Russian Qt Forum
Ноябрь 23, 2024, 01:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: соединение сигнала объекта QML с обработчиком (функцией ) в JS  (Прочитано 5486 раз)
kvrus
Гость
« : Февраль 17, 2012, 14:37 »

Задача такая.
Есть файл LineParamEdit.qml - это объект QML. У этого объекта есть сигнал
signal setParam(string name,string value, string unit);

есть файл main.qml - это основной qml документ в котором хочется отобразить несколько LineParamEdit. Для
их отображения создан файл my.js:

var component = Qt.createComponent("LineParamEdit.qml"); // определили компонент над которым происходит обработка
var linesArray       = new Array();
var coordinates = [
               [10,10],
               [10,60],
               [10,110]
            ]
var lines = [
               ["Fs","100","MHz","Sampled Frequency"],
               ["SYM","800","sml","Samples per symbol"],
               ["Flo","10","MHz","LO frequency"]
            ]
function createNewBlock(){
for (var i = 0; i < 3; i++) {
   if(component.status != Component.Ready){
      return false;
   }
   // создание объекта
   var newLine = component.createObject(convas);
   if(newLine == null){
      return false;
   }
   newLine.parameterNameText =  lines
  • ;
   newLine.parameterValueText = lines[1];
   newLine.parameterUnitText =  lines[2];
   newLine.parameterDescriptionText = lines[3];    

   newLine.setParam.connect(setParamStruct(newLine.parameterNameText,newLine.parameterUnitText,newLine.parameterUnitText));
   
   newLine.x = coordinates
  • ;                  // указать координаты нового блока
   newLine.y = coordinates[1];

   linesArray.push(newLine);               // заносим объект в массив ообъектов
}
return true;
}
function setParamStruct(name,value,unit){
   console.log(name);
   console.log(value);
   console.log(unit);
}

в main.qml скрипт импортирован и по окончанию создания qml вызывается функция динамического создания LineParamEdit

Component.onCompleted: Main.createNewBlock();

Объекты создаются как нужно, но никак не удается привязать сигналы объектов к функции обработчику setParamStruct

и строчка newLine.setParam.connect(setParamStruct(newLine.parameterNameText,newLine.parameterUnitText,newLine.parameterUnitText));
не работает.

Есть у кого нибудь идеи?
Записан
mutineer
Гость
« Ответ #1 : Февраль 17, 2012, 14:41 »

попробуй тут почитать
http://developer.qt.nokia.com/doc/qt-4.8/qml-connections.html
Записан
kvrus
Гость
« Ответ #2 : Февраль 17, 2012, 14:50 »

Я бы мог так же динамически создавать и объекты коннектеров:

 Connections {
     target: area
     onClicked: foo(parameters)
 }

но они полем target: привязываются к ID, а при динамическом создании LineParamEdit я им не могу ID назначить.

Что то ничего не понимаю как это работает. Есть хороший пример на динамическое формирование объектов?

Записан
Vass
Гость
« Ответ #3 : Февраль 17, 2012, 16:35 »

попробуйте newLine.setParam.connect(setParamStruct);
Параметры там ни к чему.
Записан
kvrus
Гость
« Ответ #4 : Февраль 24, 2012, 12:24 »

Вот что смог получить по теме "обработка сигналов динамических объектов"

Есть по вот этой ссылке:
http://doc.qt.nokia.com/4.7-snapshot/qdeclarativedynamicobjects.html
Вот такая строчка:
"To connect signals to (or receive signals from) dynamically created objects, use the signal connect() method. See Connecting Signals to Methods and Signals for more information."

Которая воодушевляет на связку посредством connect свойства, но вот ничего из этого не получается. если написать connect в QML, то все свяжется, но если из JS то не свяжется.

Поэтому есть вот такое очень специфическое решение использовать
 var newObject = Qt.createQmlObject('import QtQuick 1.0; Rectangle {color: "red"; width: 20; height: 20}',
     parentItem, "dynamicSnippet1");

если в строковую переменную с текстом QML  вписать обработчик сигнала, то он сработает.   
 

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 20.