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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QML - изображение из объекта  (Прочитано 8013 раз)
AfterEarth
Гость
« : Январь 26, 2011, 09:25 »

Здравствуйте ещё раз!
Подскажите, пожалуйста, как вывести в элемент Image в QML изображение из property объекта?
Текст без проблем (пример objectlistmodel), а вот изображение как получить из него?

Заранее огромное спасибо! Очень нужно срочно!
Записан
twp
Гость
« Ответ #1 : Январь 26, 2011, 12:43 »

свойство Image source имеет тип url, свойство объекта имеет тот же тип?
Записан
AfterEarth
Гость
« Ответ #2 : Январь 27, 2011, 04:28 »

Про URL понятно. Как мне URL получить из QImage или подставить туда данные из базы?
Заранее спасибо!
Записан
twp
Гость
« Ответ #3 : Январь 27, 2011, 12:23 »

Я так понял проблема в том что нужно подгружать QImage из памяти, а не конктретного источника (файла на диске, ресурсов или интернет). Тогда вроде для этих целей есть класс QDeclarativeImageProvider, в котором нужно переопределить метод requestPixmap. Я сам не работал с ним, но думаю это то что нужно. Вероятно также есть возможность загрузить QImage прям с базы данных. Есть примеры как работать с базой в QML (examples/declarative/sqlstorage и demos/declarative/snake).
Записан
AfterEarth
Гость
« Ответ #4 : Январь 28, 2011, 07:26 »

Мне его нужно в модель (model) GridView запихать и при том свой для каждого элемента списка :-/
Delegate -компонент
Код:
Component {
                id: appDelegate

                Item {
                    x: 0
                    y: 0
                    width: 315; height: 116

                    Image {
                        id: myIcon
                        y: 20; anchors.horizontalCenter: parent.horizontalCenter
                        source: "image://colors/yellow" //icon
                    }

                   Text {
                        anchors { horizontalCenter: parent.horizontalCenter; top: myIcon.bottom; }
                        text: name // это property элемента списка
                       
                    }
                }
            }

Вывод Grid
Код:
GridView {
                       x: 0
                       y: 0
                       flow: GridView.LeftToRight
                       width: parent.width - scrollLeftButton.width-scrollRightButton.width
                       height: parent.height
                       contentWidth: parent.width - scrollLeftButton.width
                       contentHeight: parent.height
                       cellWidth: 315; cellHeight: 116
                       highlight: appHighlight
                       focus: true
                       model: catalogData //Созданный в С список
                       delegate: appDelegate

Создание списка элементов:
Код:
    while(query.next())
    {
        catalogList.append(new CatalogObject(query.value(0).toString(), false));
    }
 
    if (catalogList.count()>0)
      context->setContextProperty("catalogData",  QVariant::fromValue(catalogList));
}

Каждый CatalogObject имеет свои property, которые используются в Delegate-компоненте

Объявил QDeclarativeImageProvider в конструкторе, который создаёт список:
Код:
QDeclarativeEngine *engine = ctxt->engine();
    engine->addImageProvider(QLatin1String("colors"), new ColorImageProvider);
, но как его для каждого элемента списка сделать своим и получить его в Delegate-компоненте, никак не "допру" :-/ Ещё и торопят, так-бы разобрался -бы со временем :-/
Заранее благодарен за ответ!
Записан
AfterEarth
Гость
« Ответ #5 : Январь 29, 2011, 05:46 »

В общем эту проблему я решил тоже  Веселый-теперь проблема-обновить содержимое GridView. В обработчике клика мыши я устанавливаю свойство в классе списка, который перезаполняет модель данных.

Заранее благодарен за ответ по существу!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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