Russian Qt Forum

Qt => Qt Quick => Тема начата: RustAlex от Май 06, 2016, 00:34



Название: Как добраться до значения роли вне делегата?
Отправлено: RustAlex от Май 06, 2016, 00:34
Добрый день.
Несколько раз сталкивался с проблемой, все время как-то обходил, но должно быть решение "в лоб"!
ПРоблема:

НЕ могу получить доступ к роли определенной в с++ из QML, кроме как из делегата

Код
/* MyList.qml  */
ListView {
 model: myModel
 delegate: MyDelegate{}
}
 

Файл делегата:
Код
/* MyDelegate.qml*/
Item {
 text: strValue // poluchayu znachenie!!!
}
Другой QML файл:
Код
ProprietaryQml {
 MyList {
   id: usedMyList
 }
 
   onPressed: {
    myFunc(usedMyList.delegate.strValue); // parametr undefined
 }
 
}
При этом модель определена в С++, это может быть модель например на базе QSqlQueryModel или QSortFilterProxyModel
в котором определена роль strValue.

Как заставить usedMyList.delegate.strValue - получать значение?
property alias или property string  - видимо надо как-то правильно определить в нужной области видимости. В трех соснах блуждаю. Help!
Если нужно покажу как подключаю модель...


Название: Re: Как добраться до значения роли вне делегата?
Отправлено: Отражение луны от Май 06, 2016, 12:27
Обычно для этого существуют методы самой модели. Например, у ListModel есть соотвествующие cound, get и set.
Реализуй на уровне c++  (методы должны быть Q_INVOKABLE) и ты сможешь использовать их через model_id.method();

Но тут еще возникает логичный вопрос - а зачем?


Название: Re: Как добраться до значения роли вне делегата?
Отправлено: RustAlex от Май 10, 2016, 12:58
Спасибо! Реализация в модели метода с Q_INVOKABLE  - решила проблему. Заодно вскрыв непраздный вопрос "зачем"... ведь уже был метод который решал параллельную проблему - его надо было просто слегка расширить, а не упираться в желание сделать все в QML.
Лишний раз убеждаюсь что не надо упираться в решение проблемы - показавшимся простым и правильным вначале. Иногда надо абстрагироваться от принятого изначально решения и взглянуть на проблему с иной стороны.