Russian Qt Forum

Qt => Qt Quick => Тема начата: kuzulis от Январь 22, 2015, 18:50



Название: [Решено]Loader: узнать тип загруженного компонента для доступа к свойствам
Отправлено: kuzulis от Январь 22, 2015, 18:50
Всем доброго времени.

К примеру, у меня есть UI, в котором выводятся два одинаковых списка ListView, которые делят
экран ровно пополам (т.е. один список слева, а другой справа). Эти списки (компоненты)
могут загружаться и отображаться в любое время при поможи Liader-а. Но также эти списки
могут быть не загружены (как все , так и какой-то из них), а вместо списка загружен другой
компонент (виджет).

Задача: Нужно определять, в каком из лоадеров на данный момент загружен список для
того, чтобы по клавишам Key_Left/Key_Rigth менять индекс у загруженных списков. Если
загружено два списка, то их индексы должны меняться вместе.

В общем случае команды на инкремент/декремент индекса я получаю по сети, т.о. здесь
кнопочки Key_Left/Key_Rigth просто для примера.

Пока сделал как-то так:

Код
Item {
   id: window
   anchors.fill: parent
 
   Loader {
       id: leftScreenLoader
       x: 0; y: 0; width: window.width / 2; height: window.height;
       source: "qrc:/qml/Menu.qml"
   }
 
   Loader {
       id: rigthScreenLoader
       x: window.width / 2; y: 0; width: window.width / 2; height: window.height;
       source: "qrc:/qml/Menu.qml"
   }
 
   // Emulate key-press (on the real keyboard)
   focus: true
   Keys.onPressed: {
       switch (event.key) {
       case Qt.Key_Left:
           leftScreenLoader.item.decrementCurrentIndex();
           break;
       case Qt.Key_Right:
           leftScreenLoader.item.incrementCurrentIndex();
           break;
       default:
           break;
       }
   }
}
 

Здесь пока меняется индекс у левого меню (который ListView).

Но проблема в том, что в левом лоадере может быть загружен не ListView (не менюшка),
а какой-то иной компонент, у которого нет свойства типа increment(decrement)CurrentIndex().

Так вот, как бы это разрудить? Или, может есть иной путь как это делать?

 


Название: Re: Loader: узнать тип загруженного компонента для доступа к свойствам
Отправлено: carrygun от Январь 23, 2015, 05:31
А typeof(increment(decrement)CurrentIndex()) не пробовали?


Название: [Решено]Re: Loader: узнать тип загруженного компонента для доступа к свойствам
Отправлено: kuzulis от Январь 23, 2015, 12:54
Да, большое спасибо - то что нужно. Работает! :)

Код
   // Emulate key-press (on the real keyboard)
   focus: true
   Keys.onPressed: {
       switch (event.key) {
       case Qt.Key_Up:
           rigthScreenLoader.source = "qrc:/qml/Menu.qml";
           break;
       case Qt.Key_Down:
           rigthScreenLoader.source = "qrc:/qml/Video.qml";
           break;
       case Qt.Key_Left:
           if (typeof(rigthScreenLoader.item) != 'undefined'
                   && typeof(rigthScreenLoader.item.decrementCurrentIndex) != 'undefined') {
               rigthScreenLoader.item.decrementCurrentIndex();
           } else {
               console.log("Left - undefined item");
           }
 
           break;
       case Qt.Key_Right:
           if (typeof(rigthScreenLoader.item) != 'undefined'
                   && typeof(rigthScreenLoader.item.incrementCurrentIndex) != 'undefined') {
               rigthScreenLoader.item.incrementCurrentIndex();
           } else {
               console.log("Right - undefined item");
           }
           break;
       default:
           break;
       }
   }