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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите с моделью и QTableView  (Прочитано 4531 раз)
limmenz
Гость
« : Апрель 02, 2009, 19:58 »

Есть модель, наследованная от QAbstractTableModel, и есть QTableView. Проблема в том, что вьюха не отображает абсолютно ничего (даже заголовки), если создать экземпляр модели и сделать setModel вьюхе в файле mainwindow.cpp в конструкторе. Но если сделать то же самое в файле main.cpp, то всё работает.
Вот пример того, как делаю в mainwindow.cpp:
Код:
Worksmodel worksmodel(&worklist);
tableView->setModel(&worksmodel);

А вот так в main.cpp:
Код:
MainWindow w;
Worksmodel worksmodel(&worklist);
w.tableView->setModel(&worksmodel);
w.show();

Как сделать так, чтобы работало в mainwindow.cpp?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Апрель 02, 2009, 20:22 »

в первом варианте модель удаляется сразу же после отработки конструктора твоего mainwindow (или что там). Во втором приложение висит в QApplication::exec() и модель существует до тех пор пока main() выполняется и поэтому всё работает.

В первом случае надо объект "worksmodel" вынести в атрибуты класса, или создавать динамически через new (тогда и worklist тоже желательно создавать динамически).
« Последнее редактирование: Апрель 02, 2009, 20:26 от Alex Custov » Записан
limmenz
Гость
« Ответ #2 : Апрель 03, 2009, 13:06 »

Спасибо за ответ, но почему-то не сработало. Скорее всего я что-то неправильно сделал. Создаю модель так:
Код:
Worksmodel worksmodel = new Worksmodel(&worklist);
Но компилятор выдаёт ошибку:
mainwindow.cpp:36: error: conversion from `Worksmodel*' to non-scalar type `Worksmodel' requested

Если worksmodel объявлять в mainwindow.h в качестве атрибута класса, то как передавать конструктору модели массив с данными (worksmodel)? Не силён в С++, но разобраться необходимо
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Апрель 03, 2009, 13:10 »

Цитировать
Worksmodel *worksmodel = new Worksmodel(&worklist);

ЗЫ: Обрати внимание на "*"
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
limmenz
Гость
« Ответ #4 : Апрель 03, 2009, 13:33 »

Цитировать
Worksmodel *worksmodel = new Worksmodel(&worklist);

ЗЫ: Обрати внимание на "*"
Большое спасибо! "*" пробовал ставить, но не убирал "&" из tableView->setModel(&worksmodel), и, как выяснилось, совершенно зря Веселый
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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