Russian Qt Forum

Qt => Model-View (MV) => Тема начата: limmenz от Апрель 02, 2009, 19:58



Название: Помогите с моделью и QTableView
Отправлено: 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?


Название: Re: Помогите с моделью и QTableView
Отправлено: Alex Custov от Апрель 02, 2009, 20:22
в первом варианте модель удаляется сразу же после отработки конструктора твоего mainwindow (или что там). Во втором приложение висит в QApplication::exec() и модель существует до тех пор пока main() выполняется и поэтому всё работает.

В первом случае надо объект "worksmodel" вынести в атрибуты класса, или создавать динамически через new (тогда и worklist тоже желательно создавать динамически).


Название: Re: Помогите с моделью и QTableView
Отправлено: limmenz от Апрель 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)? Не силён в С++, но разобраться необходимо


Название: Re: Помогите с моделью и QTableView
Отправлено: pastor от Апрель 03, 2009, 13:10
Цитировать
Worksmodel *worksmodel = new Worksmodel(&worklist);

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


Название: Re: Помогите с моделью и QTableView
Отправлено: limmenz от Апрель 03, 2009, 13:33
Цитировать
Worksmodel *worksmodel = new Worksmodel(&worklist);

ЗЫ: Обрати внимание на "*"
Большое спасибо! "*" пробовал ставить, но не убирал "&" из tableView->setModel(&worksmodel), и, как выяснилось, совершенно зря :D