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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.5.0 Связь модели с различными данными  (Прочитано 5940 раз)
Danila_Bagrofff
Гость
« : Октябрь 13, 2009, 06:53 »

Я впервые реализую модель/представление, и мне пока не все ясно. Помогите связать набор собственных данных с моделью для отображения в таблице. Но это фактически список данных.

Проще говоря, нужно вывести справочную информацию по имеющимся данным в разных классах.

class THouse
{
   THouse();
   int count;  //количество домов
   QList <double> s; //массив площадей домов
   QList <QString> name; //массив имен владельцов
}

Как привязать вывод данных модели к изменяющемуся количеству данных. И к разнотипным?
Записан
CroCIV
Гость
« Ответ #1 : Октябрь 13, 2009, 07:49 »

как ты хочешь их связать друг с другом? что будешь выставлять по горизонтали а что по вертикали? есть QStandartItemModel на нем можно реализовать если не все то многое, остальное можно реализвать используя набор QStandartItemModel. Работает так:
Код:
qsimPg2 = new QStandardItemModel(0,14);
qsimPg2->setHorizontalHeaderLabels (\*QStringList*\);
QList<QStandardItem *> lsi;
for (int j=0;j<13;j++)
lsi<<(new QStandardItem(sl[j]));  //sl - QList<T>
qsimPg2->appendRow(lsi);
ui.tvPg2->setModel(qsimPg2); //ui.tvPg2 - QTableView
ui.tvPg2->setColumnHidden(0,true);
Записан
CroCIV
Гость
« Ответ #2 : Октябрь 13, 2009, 07:58 »

за последние два месяца только этим и занимаюсь что данными туда сюда жанглирую  Плачущий, спрашивай  Улыбающийся
Записан
Danila_Bagrofff
Гость
« Ответ #3 : Октябрь 13, 2009, 08:16 »

Вид будет весьма прост: таблица без сетки с таким видом:

кол-во домов: 10
площадь 1 дома: 10,5
площадь второго дома: 20,6
владелец 1 дома: Петров
владелец второго: Иванов

То есть простая таблица.

Щас попробую что ты мне написал, спасибо.
А если будет меняться в QList кол-во строк в представлении таблицы будет меняться все полностью?
Записан
CroCIV
Гость
« Ответ #4 : Октябрь 13, 2009, 08:36 »

в том и прелесть Qt что модельные виджеты не хранят данные модели они могут только их отображать (ну правда некоторые виджеты имеют собственную модель, такие как QTreeWidget и QTableWidjet) для этого им нужен указатель на любую модель, и будет работать.
Записан
Danila_Bagrofff
Гость
« Ответ #5 : Октябрь 13, 2009, 10:07 »

Код:
qsimPg2 = new QStandardItemModel(0,count);
QStringList list;
list.append("houses:");
list.append("square:");
list.append("name:");
qsimPg2->setHorizontalHeaderLabels (list);
QList<QStandardItem *> lsi;
lsi.append(new QStandardItem(house->count()));
lsi.append(new QStandardItem(house->s[0]));
lsi.append(new QStandardItem(house->name[0]));
qsimPg2->appendRow(lsi);
tvPg2->setModel(qsimPg2);
tvPg2->setColumnHidden(0,true);

setModel  - ошибка. Не может что-то сделать. Что не так?
Записан
CroCIV
Гость
« Ответ #6 : Октябрь 13, 2009, 10:13 »

а текст ошибки можно увидеть?
Записан
Danila_Bagrofff
Гость
« Ответ #7 : Октябрь 13, 2009, 12:11 »

отставить. моя невнимательность. инициализация tableView после обращения =) Неперекопировал =)

Разбираемся дальше.  ) Спс =)
« Последнее редактирование: Октябрь 13, 2009, 12:33 от Danila_Bagrofff » Записан
Danila_Bagrofff
Гость
« Ответ #8 : Октябрь 13, 2009, 13:51 »

А как сделать реакцию на изменение данных в модели?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #9 : Октябрь 13, 2009, 14:03 »

если есть модель, то доступ к данным из программы осуществляется только через нее (хороший тон и все такое). Если же данные могут изменяться извне (например файловая система), то нужно делать либо сигнал в классе с данными, либо класс-наблюдатель между моделью и данными (в случае с ФС обертка на FileSystemWatcher), с тем же сигналом для модели.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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