Russian Qt Forum

Qt => Qt Quick => Тема начата: virtual_root от Октябрь 22, 2012, 11:22



Название: как передать в qml QHash ?
Отправлено: virtual_root от Октябрь 22, 2012, 11:22
Добрый день ребята. Не подскажите, пожалуйста, как мне правильно обработать в файле qml результат функции с++, которая возвращает QHash ? У меня есть следующий класс:
Код
C++ (Qt)
#include <QDeclarativeView>
#include <QVariant>
#include <QHash>
 
class settingsGrid : public QDeclarativeView
{
   Q_OBJECT
 
public:
   settingsGrid();
   ~settingsGrid();
public:
 
   Q_INVOKABLE void Quit();
   Q_INVOKABLE QHash<QString,QVariant> Test();
 
private:
   void Init();
 
private:
   QString m_ContentPath;
};
Код
C++ (Qt)
#include "settingsgrid.h"
#include <QtGui>
#include <QDeclarativeContext>
 
settingsGrid::settingsGrid()
{
   Init();
}
 
settingsGrid::~settingsGrid(){
 
}
 
void settingsGrid::Init()
{
   QString m_ContentPath = "../QML/viewer/main/settingsGrid";
   setFocusPolicy(Qt::StrongFocus);
   // Изменять размеры QML объекта под размеры окна
   // Возможно делать и наоборот,
   // передавая QDeclarativeView::SizeViewToRootObject
   setResizeMode(QDeclarativeView::SizeRootObjectToView);
   rootContext()->setContextProperty("window", this);
 
   // Загрузить QML файл
   setSource(QUrl::fromLocalFile(m_ContentPath + "/settingsGrid.qml"));
 
   // Добавим объект window, который будет ссылкой
   // на главное окно в пространство QML
}
 
void settingsGrid::Quit()
{
   QApplication::quit();
}
 
QHash<QString,QVariant> settingsGrid::Test(){
   QHash<QString,QVariant> map;
   map["desktop1"] = "23";
   map["desktop2"] = "25";
   return map;
}
 
 
в файле settingsGrid.qml :
Код:
        Item{
            id: desktopSet
            property variant items  
            Component.onCompleted:{ items = window.Test(); console.log(items) }
        }
мне никак не удается вывести или превратить в массив результат который мне возвращает window.Test(); Подскажите, как справиться с проблемой?


Название: Re: как передать в qml QHash ?
Отправлено: mutineer от Октябрь 22, 2012, 11:36
Что выводится в консоль?


Название: Re: как передать в qml QHash ?
Отправлено: virtual_root от Октябрь 22, 2012, 11:44
выводится следующее:
Код:
QVariant(QVariantHash)


Название: Re: как передать в qml QHash ?
Отправлено: virtual_root от Октябрь 22, 2012, 11:46
я пробовала так достать значения:
Код:
for (var i=0; i<items.length; i++)
             console.log(items[i])
но не определяется свойство length и в цикл не попадаю..
пробовала так:
Код:
         for (var prop in items)
             console.log(prop, "=", items[prop])
но тоже не помогло...


Название: Re: как передать в qml QHash ?
Отправлено: mutineer от Октябрь 22, 2012, 11:49
я пробовала так достать значения:
Код:
for (var i=0; i<items.length; i++)
             console.log(items[i])
но не определяется свойство length и в цикл не попадаю..
пробовала так:
Код:
         for (var prop in items)
             console.log(prop, "=", items[prop])
но тоже не помогло...

Поясни "не помогло" - это что значит?


Название: Re: как передать в qml QHash ?
Отправлено: virtual_root от Октябрь 22, 2012, 11:52
я не попадаю в цикл.. не могу понять почему ???


Название: Re: как передать в qml QHash ?
Отправлено: virtual_root от Октябрь 22, 2012, 12:03
мне подсказали сделать так и всё заработало!
Код:
QVariantMap settingsGrid::Test(){
    QVariantMap map;

    map["desktop1"] = 23;
    map["desktop2"] = "str";
    return map;
}
в qml файле соответственно:
Код:
Item{
            id: desktopSet
            property variant items  
            Component.onCompleted:{ items = window.Test();
                for (var prop in items)
                           console.log(prop, "=", items[prop])
                

            }
        }