Название: QML QTableView Отправлено: NKovalev64 от Май 20, 2014, 22:54 Есть с++ модель (от QAbstractItemModel) в qml представлении QTableView. В модели 3 роли, 2 из них отображены в таблице, а третья должна быть отображена в отдельном элементе по клику на соответствующую ячейку таблицы.
TableView { id: tableView model: myModel TableViewColumn{ role: "role1" ; title: "qwerty" ; width: 200 } TableViewColumn{ role: "role2" ; title: "qwerty" ; width: 200 } onClicked: { textArea.text = ??? } } TextArea { id:textArea } Как сделать, чтобы по клику на ячейку таблицы, в textArea записывалось содержимое модели с ролью "role3"? Примерно того что нужно показан здесь: http://www.youtube.com/watch?v=_6_F6Kpjd-Q#t=600 Только там XmlListModel, а у меня с++ модель. Название: Re: QML QTableView Отправлено: navrocky от Май 24, 2014, 18:47 Сделай у модели метод, выдающий строку в виде JS-объекта:
Код: Q_INVOKABLE QVariantMap getRow(int row); Код: var o = model.getRow(listView.currentIndex); Я не нашел более нормального способа из JS доступаться к модели. В моем случае модель хранила данные именно в QVariantMap, и у меня никакого оверхэда не возникло ) Также если ты объявлял константы ролей в модели, а ты скорее всего это сделал, то можно этот enum пробросить в QML и сделать метод, возвращающий QVariant в зависимости от роли. Код: Q_INVOKABLE QVariant getRowValue(MyModelRole role, int row); Код: label.text = model.getRowValue(MyModel.Title, listView.currentIndex); Название: Re: QML QTableView Отправлено: NKovalev64 от Май 25, 2014, 21:10 Сделай у модели метод, выдающий строку в виде JS-объекта: Код: Q_INVOKABLE QVariantMap getRow(int row); Код: var o = model.getRow(listView.currentIndex); Я не нашел более нормального способа из JS доступаться к модели. В моем случае модель хранила данные именно в QVariantMap, и у меня никакого оверхэда не возникло ) Также если ты объявлял константы ролей в модели, а ты скорее всего это сделал, то можно этот enum пробросить в QML и сделать метод, возвращающий QVariant в зависимости от роли. Код: Q_INVOKABLE QVariant getRowValue(MyModelRole role, int row); Код: label.text = model.getRowValue(MyModel.Title, listView.currentIndex); Я пока что именно так и сделал - создал в модели новый метод. Но ведь это же ужасный костыль! Есть метод data() и он уже умеет возвращать значения ячеек модели в соответсвии с заданной ролью. Так что продолжаю поиск более оптимального способа. |