Название: как передать в 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
Название: 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])
} }
|