Russian Qt Forum

Qt => Qt Quick => Тема начата: AfterEarth от Январь 26, 2011, 09:25



Название: QML - изображение из объекта
Отправлено: AfterEarth от Январь 26, 2011, 09:25
Здравствуйте ещё раз!
Подскажите, пожалуйста, как вывести в элемент Image в QML изображение из property объекта?
Текст без проблем (пример objectlistmodel), а вот изображение как получить из него?

Заранее огромное спасибо! Очень нужно срочно!


Название: Re: QML - изображение из объекта
Отправлено: twp от Январь 26, 2011, 12:43
свойство Image source имеет тип url, свойство объекта имеет тот же тип?


Название: Re: QML - изображение из объекта
Отправлено: AfterEarth от Январь 27, 2011, 04:28
Про URL понятно. Как мне URL получить из QImage или подставить туда данные из базы?
Заранее спасибо!


Название: Re: QML - изображение из объекта
Отправлено: twp от Январь 27, 2011, 12:23
Я так понял проблема в том что нужно подгружать QImage из памяти, а не конктретного источника (файла на диске, ресурсов или интернет). Тогда вроде для этих целей есть класс QDeclarativeImageProvider, в котором нужно переопределить метод requestPixmap. Я сам не работал с ним, но думаю это то что нужно. Вероятно также есть возможность загрузить QImage прям с базы данных. Есть примеры как работать с базой в QML (examples/declarative/sqlstorage и demos/declarative/snake).


Название: Re: QML - изображение из объекта
Отправлено: AfterEarth от Январь 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-компоненте, никак не "допру" :-/ Ещё и торопят, так-бы разобрался -бы со временем :-/
Заранее благодарен за ответ!


Название: Re: QML - изображение из объекта
Отправлено: AfterEarth от Январь 29, 2011, 05:46
В общем эту проблему я решил тоже  :D-теперь проблема-обновить содержимое GridView. В обработчике клика мыши я устанавливаю свойство в классе списка, который перезаполняет модель данных.

Заранее благодарен за ответ по существу!