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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: как передать в qml QHash ?  (Прочитано 4518 раз)
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(); Подскажите, как справиться с проблемой?
« Последнее редактирование: Октябрь 22, 2012, 11:31 от tiny developer » Записан
mutineer
Гость
« Ответ #1 : Октябрь 22, 2012, 11:36 »

Что выводится в консоль?
Записан
virtual_root
Гость
« Ответ #2 : Октябрь 22, 2012, 11:44 »

выводится следующее:
Код:
QVariant(QVariantHash)
Записан
virtual_root
Гость
« Ответ #3 : Октябрь 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])
но тоже не помогло...
Записан
mutineer
Гость
« Ответ #4 : Октябрь 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])
но тоже не помогло...

Поясни "не помогло" - это что значит?
Записан
virtual_root
Гость
« Ответ #5 : Октябрь 22, 2012, 11:52 »

я не попадаю в цикл.. не могу понять почему Непонимающий
Записан
virtual_root
Гость
« Ответ #6 : Октябрь 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])
                

            }
        }
« Последнее редактирование: Октябрь 22, 2012, 12:04 от tiny developer » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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