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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: модель для таблицы и дерева  (Прочитано 6417 раз)
nvek
Гость
« : Февраль 12, 2017, 17:02 »

Знаю вопросы не новые, но как быть если отобразить в таблицу из дерева то, что не видно в дереве, сейчас постараюсь обьяснить.данные получены из xml файла. B дереве мы видим лишь "A", "B", "C". остальные дынные не будут показываться, но зато по клику на на B Например показать его виток.

+---+                                  +-----+------+-----+
| A  |                                   | B1   |        |       |
+---+                                  +-----+------+-----+
  |                                       | B2   |        |       |
  |   +----+            ==>        +-----+------+-----+
  +--| B   |                            | B3   |        |       |
  |   +----+                           +-----+------+-----+
  |     |                               
  |     |   +-----+                 
  |     +--| B1   |                 
  |     |   +-----+               
  |     |
  |     |   +-----+
  |     +--| B2   |
  |     |   +-----+
  |     |
  |     |   +-----+
  |     +--| B3   |
  |         +-----+
  |                                     
  |   +----+           
  +--| C   |                         
      +----+                       
        |                               
        |   +-----+                 
        +--| C1   |                 
        |   +-----+                 
        |
        |   +-----+
        +--| C2   |
        |   +-----+
        |
        |   +-----+
        +--| C3   |
            +-----+
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #1 : Февраль 13, 2017, 12:03 »

Сколько?
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
ssoft
Программист
*****
Offline Offline

Сообщений: 574


Просмотр профиля
« Ответ #2 : Февраль 13, 2017, 13:11 »

Знаю вопросы не новые, но как быть если отобразить в таблицу из дерева то, что не видно в дереве, сейчас постараюсь обьяснить.данные получены из xml файла. B дереве мы видим лишь "A", "B", "C". остальные дынные не будут показываться, но зато по клику на на B Например показать его виток.

Задача не сложная. Необходимо сформировать прокси модель (например, на основе QAbstractProxyModel), которая из исходной будет предоставлять только необходимые для отображения данные.
Записан
nvek
Гость
« Ответ #3 : Март 10, 2017, 09:44 »

я правильно понял? мне надо создать модель (самую главную) унаследованную от абстрактной модели
затем я пишу модель для дерева уже наследованную от прокси, куда загружаю данные главной модели.
Непонимающий?
 и еще, если мне надо задать иконки как это сделать?
« Последнее редактирование: Март 10, 2017, 09:52 от nvek » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #4 : Март 10, 2017, 11:38 »

http://doc.qt.io/qt-5/qt.html#ItemDataRole-enum
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Март 10, 2017, 13:22 »

чёто с этой аватаркой уже не первый человек встречается на этом форуме
Записан

Юра.
nvek
Гость
« Ответ #6 : Март 11, 2017, 11:47 »

чёто с этой аватаркой уже не первый человек встречается на этом форуме
они стандартные Улыбающийся
Записан
nvek
Гость
« Ответ #7 : Март 13, 2017, 14:13 »

пока у меня как то покриворукому:
есть класс модель, есть класс модельИтем. на мое удивление данными заполняет вьюшку.
хочу создать промежуточную модель
ТреМодель, унаследованную от QSortFilterProxyModel
и уже вывести ее. Опять придется делать деревянную структуру? и нужна ли деревянная структура в главной модели?
или можно использовать одну и туже деревянную структуру? (МодельИтем)
пока все из симплов.
Ps новичек в этой теме.

Записан
nvek
Гость
« Ответ #8 : Март 16, 2017, 13:24 »

Я думаю продолжать эту тему.
Вопрос такой, вернее не вопрос, а небольшое затруднение
есть абстрактная модель (все стандартно)
Код:
class ModelItem;

class BaseModel : public QAbstractItemModel
{
Q_OBJECT

private:
ModelItem* displayRootItem;
ModelItem* rootItem;

protected:
void setDisplayRootItem(ModelItem*);
ModelItem* const getDisplayRootItem() const;
void setRootItem(ModelItem*);
//ModelItem* getRootItem() const;

public:
ModelItem* getRootItem() const;
explicit BaseModel(QObject *parent = 0);
virtual ~BaseModel();

QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const;
QModelIndex parent(const QModelIndex& child) const;
int rowCount(const QModelIndex& parent = QModelIndex()) const;

int columnCount(const QModelIndex & parent) const;

QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);

};
mpdelItem:
Код:
class BaseModel;

class ModelItem : public QObject
{
Q_OBJECT

public:

private:
ModelItem * parentItem;
QList < ModelItem * > childrenList;

public:
ModelItem();
~ModelItem();

public:
virtual QVariant data(int role) const;
virtual bool setData(const QVariant& value, int role);
virtual ModelItem* parent() const;
virtual Qt::ItemFlags flags() const;

virtual void AddChild(ModelItem* n);
virtual void AddChildTo(ModelItem* n, int position);
virtual int IndexOfChild(ModelItem*) const;
virtual int ChildrenCount() const;

virtual ModelItem* ChildAt(int index) const;
void ClearChildrenList();
};
treeViewModel:
Код:
class TreeViewModel : public BaseModel
{
Q_OBJECT

public:

explicit TreeViewModel(QObject * parent = 0);

private:

};

treeViewModelItem:
Код:
class TreeViewModelItem : public ModelItem
{

public:
enum IconType
{
folderNode,
treeNode,
archiveNode,
fileNode,
folderNodeDisabled,
treeNodeDisabled,
rootNode,
rootNodeDisabled
};

TreeViewModelItem();

QVariant data(int role);
bool setData(const QVariant& value, int role);

void setIcon();
void setText();
//
QString text;
IconType iconType;
};

я например хочу занести данные в модель
читаю xml
вот ридер в другом отдельном классе, не унаследованном ни от кого.
в него подается строка xml
Код:
bool StatXmlReader::read(const QString & source, const QString & nameFile)
{
TreeViewModelItem * tItem = new TreeViewModelItem();
BaseModel* bModel = new BaseModel();
ModelItem * rootItem = bModel->getRootItem();

rootItem->AddChild(tItem);
//xmlReader = new QXmlStreamReader(source);
        //.....
return true;
}
в тот момент когда я хочу добавить рутовый элемент у меня вылетает.
вопрос, как заносить в эту модель данные?Непонимающий?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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