![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
dexter_man |
![]() ![]()
Сообщение
#1
|
Студент ![]() Группа: Новичок Сообщений: 16 Регистрация: 12.5.2008 Пользователь №: 173 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Помогите реализовать QTreeView:
Модель данных выглядит седуюцим образом Здание 1 1 |-----Комната 1 1 Здание 2 1 |-----Комната 1 1 Здание 3 3 |-----Комната 1 2 |-----Комната 2 1 |-----Комната 3 1 Короче получается обычное дерево. например когда выбирается "Здание 3" и вводится кол-во комнат (с помошью QSpinBox), например 3 , то добавляется введенное количество комнат. Посоветуйте с чего хоть начать, в программирование полный профан!!! Каким образом это хоть можно сделать??? И каким оразом реализовть модель/представление??? |
|
|
![]() |
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
dexter_man |
![]()
Сообщение
#3
|
Студент ![]() Группа: Новичок Сообщений: 16 Регистрация: 12.5.2008 Пользователь №: 173 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Нет, все в этом же диалоге!
Комнаты добавляются динамически. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
а где в дереве должен быть спинбокс, в одной из колонок родительского элемента?
|
|
|
dexter_man |
![]()
Сообщение
#5
|
Студент ![]() Группа: Новичок Сообщений: 16 Регистрация: 12.5.2008 Пользователь №: 173 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Примерно вот так должно выглядить так!
Напротив здания вводтся должно количество комнат и они должны автоматически добавляться и удаляться соответственно Сообщение отредактировал dexter_man - 12.5.2008, 16:46
Эскизы прикрепленных изображений
|
|
|
dexter_man |
![]()
Сообщение
#6
|
Студент ![]() Группа: Новичок Сообщений: 16 Регистрация: 12.5.2008 Пользователь №: 173 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Хоть с чего-то начать?
Каким образом реализовать новую модель под мои нужды? Я просто тему "Модель/Представление" не понимаю вообще ((( И еще к тому же ангрийского не знаю ((( Сообщение отредактировал dexter_man - 12.5.2008, 20:49 |
|
|
ViGOur |
![]()
Сообщение
#7
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Я тебе могу помочь в этом, но только завтра, так как сейчас времени нет.
И еще к тому же ангрийского не знаю ((( А для чего мы переводим спрашивается документацию? ![]() Читай на русском языке: Программирование Модель/Представление Если будет что-то не понятно, спрашивай, поможем. ![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
я так прикинул, тут самое главное делегат свой какчественно сделать на основе спинбокса, в момент когда редактирование завершится, фокус с него уйдет, надо чтобы помимо обновления данных в модели еще и n подветвей создавалось.
dexter_man, почитай то, что ViGOur дал про концепцию, делегаты (я не доперевел ![]() |
|
|
dexter_man |
![]()
Сообщение
#9
|
Студент ![]() Группа: Новичок Сообщений: 16 Регистрация: 12.5.2008 Пользователь №: 173 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Да я его уже читал на русском языке в переведенной документации и в книге М.Шлее и в книге Бланшета читал, нихрена не понял переопределение функций когда создаешь новую модель, либо делегат! Наверное я очень туп!
Просто уже неделю сижу не могу сделать ((( Скоро крыша поедет... |
|
|
Litkevich Yuriy |
![]()
Сообщение
#10
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
тогда смотри указаный мной пост, я тоже тупил
![]() |
|
|
dexter_man |
![]()
Сообщение
#11
|
Студент ![]() Группа: Новичок Сообщений: 16 Регистрация: 12.5.2008 Пользователь №: 173 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Если делать модель QAbstractItemModel то обязательно переопределять все функции?
Спасиба посмотрел ща попробую разобраться с кодом!!! |
|
|
Litkevich Yuriy |
![]()
Сообщение
#12
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
---
Представление, напримере табличного, можно так вообразить: Натянута сетка, как волейбольная, в ней ячейки, в ячейке отображаются цифирки, буковки или вовсе картинки. Если надо поменять в ячейке содержимое, т.е. человек в ячейку ручками полез, туда быстренько подсовывается устройство - делегат. Оно занает как менять, в первы момент делегат узнает у модели данные, передав ей координаты - модельный индекс, затем показывает себя с этими данными, и человек уже работает с делегатом, потом когда фокус от я чеки уходит, делегат отправляет данные в модель, опять же с помощью координат - модельного индекса. А сам убегает, на его месте представление показывает то что сейчас в модели. Если делать модель QAbstractItemModel то обязательно переопределять все функции? ненадо тебе модель делать, тебе надо делегат делать, который, когда будет убегать из сетки, помимо того что данные в модель запишит, еще и подветок нужное кол-во в модели создаст, и все убежит, а когда убежит представление у модели спросит "как там с данными?", а модель ему свежачек подкинет. |
|
|
dexter_man |
![]()
Сообщение
#13
|
Студент ![]() Группа: Новичок Сообщений: 16 Регистрация: 12.5.2008 Пользователь №: 173 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Пасиба!!! Ща буду пробывать!
Вы вдохнули в меня оптимизм!!! ![]() |
|
|
dexter_man |
![]()
Сообщение
#14
|
Студент ![]() Группа: Новичок Сообщений: 16 Регистрация: 12.5.2008 Пользователь №: 173 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
А как прописать в делегате:
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#15
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Вообщем в представлении в каждой ячеку по делегату, если пользователь выбрал какое-то место, то его координаты (модельный индекс ) передаются в делегат:
в представлении ты для конкретного столбца можешь установить конкретный делегат, поэтому в делегате не надо анализировать "если столбец..." Просто сделай делегат для такого столбца. т.е. ты сделал делегат который будет подветви добавлять к текущей ветви, и назвал его AddDelgate, тогда код его использования выглядит так:
|
|
|
dexter_man |
![]()
Сообщение
#16
|
Студент ![]() Группа: Новичок Сообщений: 16 Регистрация: 12.5.2008 Пользователь №: 173 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Цитата Вообщем в представлении в каждой ячеку по делегату, если пользователь выбрал какое-то место, то его координаты (модельный индекс ) передаются в делегат: Это я уже понял Я просто хотел сделать по другому Я все понял, ща буду делать Сообщение отредактировал dexter_man - 13.5.2008, 13:55 |
|
|
dexter_man |
![]()
Сообщение
#17
|
Студент ![]() Группа: Новичок Сообщений: 16 Регистрация: 12.5.2008 Пользователь №: 173 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
а в какую функию вставить connect(spinBox, SIGNAL(valueChanged(int)), SLOT(add_column(int)))?
|
|
|
AD |
![]()
Сообщение
#18
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
dexter_man |
![]()
Сообщение
#19
|
Студент ![]() Группа: Новичок Сообщений: 16 Регистрация: 12.5.2008 Пользователь №: 173 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Мне нужно в делегате указать что если пользователь выбирает на против здания количество комнат, чтоб добавлялось звдвнное количество строк в подтаблицу.
Вот я не знаю каким образом реализовать этот слок, ведь в него должны передаваться в качестве параметров: модель и индекс.
И в какую функцию делегата его запихнуть? Сообщение отредактировал dexter_man - 13.5.2008, 15:09 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#20
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
я думаю сигналы со слотами тут лишние, можно в функции делегата setModelData() это реализовать.
|
|
|
dexter_man |
![]()
Сообщение
#21
|
Студент ![]() Группа: Новичок Сообщений: 16 Регистрация: 12.5.2008 Пользователь №: 173 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
для добавления строк нужно вызвать функцию insertRow( int row, const QModelIndex & parent = QModelIndex() ) ?
и еще, че эт за функия: void * QModelIndex::internalPointer () const ? Сообщение отредактировал dexter_man - 13.5.2008, 17:26 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#22
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
я тут подумал, как вариант можно вообще упростить решение, положим у тебя изначально забиты какие-то данные, когда ты будешь рекликать в цифирку, у тебя автоматом подставится виджет поумолчанию, ты изменишь цифирку, нажмешь энтер, модель пошлет сигнал dataChanged(), поймай его и добавь нужное кол-во дочерних строчек. Может так тебе будет проще!
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 6.5.2025, 13:12 |