crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему
> Помогите реализовать QTreeView (Модель/Представление)
dexter_man
  опции профиля:
сообщение 12.5.2008, 21:13
Сообщение #11


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 12.5.2008
Пользователь №: 173

Спасибо сказали: 0 раз(а)




Репутация:   0  


Если делать модель QAbstractItemModel то обязательно переопределять все функции?

Спасиба посмотрел ща попробую разобраться с кодом!!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.5.2008, 21:21
Сообщение #12


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


---
Представление, напримере табличного, можно так вообразить:
Натянута сетка, как волейбольная, в ней ячейки, в ячейке отображаются цифирки, буковки или вовсе картинки. Если надо поменять в ячейке содержимое, т.е. человек в ячейку ручками полез, туда быстренько подсовывается устройство - делегат. Оно занает как менять, в первы момент делегат узнает у модели данные, передав ей координаты - модельный индекс, затем показывает себя с этими данными, и человек уже работает с делегатом, потом когда фокус от я чеки уходит, делегат отправляет данные в модель, опять же с помощью координат - модельного индекса. А сам убегает, на его месте представление показывает то что сейчас в модели.

Цитата(dexter_man @ 13.5.2008, 1:13) *
Если делать модель QAbstractItemModel то обязательно переопределять все функции?

ненадо тебе модель делать, тебе надо делегат делать, который, когда будет убегать из сетки, помимо того что данные в модель запишит, еще и подветок нужное кол-во в модели создаст, и все убежит, а когда убежит представление у модели спросит "как там с данными?", а модель ему свежачек подкинет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dexter_man
  опции профиля:
сообщение 12.5.2008, 21:29
Сообщение #13


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 12.5.2008
Пользователь №: 173

Спасибо сказали: 0 раз(а)




Репутация:   0  


Пасиба!!! Ща буду пробывать!
Вы вдохнули в меня оптимизм!!! :i_am_so_happy:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dexter_man
  опции профиля:
сообщение 13.5.2008, 13:14
Сообщение #14


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 12.5.2008
Пользователь №: 173

Спасибо сказали: 0 раз(а)




Репутация:   0  


А как прописать в делегате:
if(пальзователь выбрал например здание 1 второй столбец)
    {
        QSpinBox *editor = new QSpinBox(parent);
        editor->setMinimum(1);
        editor->setMaximum(100);
// еще код
        return editor;
    }
else if (если пользователь выбрал подтаблицу с комнатами столбец 1)
{
//еще код
}
    else
        return QItemDelegate::createEditor(parent, option, index);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.5.2008, 13:51
Сообщение #15


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Вообщем в представлении в каждой ячеку по делегату, если пользователь выбрал какое-то место, то его координаты (модельный индекс ) передаются в делегат:
setEditorData(QWidget *editor, const QModelIndex &index) const
setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const

в представлении ты для конкретного столбца можешь установить конкретный делегат, поэтому в делегате не надо анализировать "если столбец..." Просто сделай делегат для такого столбца.

т.е. ты сделал делегат который будет подветви добавлять к текущей ветви, и назвал его AddDelgate, тогда код его использования выглядит так:
    // создадим делег AddDelgate
    AddDelgate myadddelegate;
    ...
    tableView.setItemDelegateForColumn(1, &myadddelegate);// переопределим делегат для первого столбца->мой
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dexter_man
  опции профиля:
сообщение 13.5.2008, 13:53
Сообщение #16


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 12.5.2008
Пользователь №: 173

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
Вообщем в представлении в каждой ячеку по делегату, если пользователь выбрал какое-то место, то его координаты (модельный индекс ) передаются в делегат:

Это я уже понял
Я просто хотел сделать по другому

Я все понял, ща буду делать

Сообщение отредактировал dexter_man - 13.5.2008, 13:55
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dexter_man
  опции профиля:
сообщение 13.5.2008, 14:27
Сообщение #17


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 12.5.2008
Пользователь №: 173

Спасибо сказали: 0 раз(а)




Репутация:   0  


а в какую функию вставить connect(spinBox, SIGNAL(valueChanged(int)), SLOT(add_column(int)))?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 13.5.2008, 14:47
Сообщение #18


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(dexter_man @ 13.5.2008, 15:27) *
а в какую функию вставить connect(spinBox, SIGNAL(valueChanged(int)), SLOT(add_column(int)))?

По идее лучше всего в конструктор!!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dexter_man
  опции профиля:
сообщение 13.5.2008, 15:06
Сообщение #19


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 12.5.2008
Пользователь №: 173

Спасибо сказали: 0 раз(а)




Репутация:   0  


Мне нужно в делегате указать что если пользователь выбирает на против здания количество комнат, чтоб добавлялось звдвнное количество строк в подтаблицу.
Вот я не знаю каким образом реализовать этот слок, ведь в него должны передаваться в качестве параметров: модель и индекс.
void add_column(int n, QAbstractItemModel *model, const QModelIndex &index);

И в какую функцию делегата его запихнуть?

Сообщение отредактировал dexter_man - 13.5.2008, 15:09
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.5.2008, 17:16
Сообщение #20


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


я думаю сигналы со слотами тут лишние, можно в функции делегата setModelData() это реализовать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 5.12.2024, 1:09