Russian Qt Forum

Qt => Model-View (MV) => Тема начата: romank от Октябрь 20, 2009, 11:26



Название: QTableView общие данные
Отправлено: romank от Октябрь 20, 2009, 11:26
Добрый день.

Создал свою реализацию QAbstractTableModel (Model) и QSortFilterProxyModel (Proxy). Данные для модели передаю через указатель. Для этого приходится делать следующее:

Код
C++ (Qt)
class ModelWellList : public QAbstractTableModel
{
public:
...
void setShareData(const SharedData*);
private:
...
const SharedData* m_data;
};
 

Однако и Proxy для работы необходимо знать данные, поэтому обеспечиваю Proxy данными:

Код
C++ (Qt)
class ProxyWellList: public QSortFilterProxyModel
{
public:
...
void setSharedData(const SharedData*);
private:
const SharedData* m_data;
 


Получается следующее. Из основного окна в виджет передаю общие данные
Код
C++ (Qt)
navigatorWidget->setShareData(&m_data);
 

Затем в виджете указатель передается в модель и прокси
Код
C++ (Qt)
modelWellList->setShareData(m_data);
proxyWellList->setSharedData(m_data);
 

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


Название: Re: QTableView общие данные
Отправлено: Igors от Октябрь 20, 2009, 18:44
Можете предложить более элегантное решение? m_data существует в программе в единственном экземпляре. Как создать "глобальный" указатель для всей программы, который будет доступен в каждом классе?
O,]

1) Объявляете указатель на  m_data, желательно в том файле где конструктор объекта с членом m_data

const SharedData* theSharedData = 0; 

2) В конструктор объекта добавляете theSharedData = m_data; Необязательно, но желательно/полезно в деструктор добавить theSharedData = 0;

3) В одном из .h файлов пишите

extern const SharedData* theSharedData;

Подсовываете этот .h файл всем кому он нужен


Название: Re: QTableView общие данные
Отправлено: romank от Октябрь 21, 2009, 07:57
Спасибо.