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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено]Loader: узнать тип загруженного компонента для доступа к свойствам  (Прочитано 2633 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Январь 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().

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

 
« Последнее редактирование: Январь 23, 2015, 12:56 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
carrygun
Гость
« Ответ #1 : Январь 23, 2015, 05:31 »

А typeof(increment(decrement)CurrentIndex()) не пробовали?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Январь 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;
       }
   }
 
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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