Версия для печати темы
Форум на CrossPlatform.RU _ Qt Модель/Представление _ создание айтемов в QStandardItemModel для QTreeView
Автор: icore2008 22.7.2008, 19:51
Всем привет.
Есть модель QStandardItemModel, которая устанавливается в QTreeView.
Мне нужно сделать так, чтобы напротив иерархии детей (QStandardItem) item1, item2, item3 создавались айтемы модели.
Подскажите, пожалуйста, как это реализовать?
Рисунок с детьми прилагается
ЗЫ: Пример simpletreemodel смотрел - не подходит реализация.
Автор: void* 22.7.2008, 21:43
icore2008, т.е. ты хочешь чтобы на месте надписей "description" были произвольные итемы модели?
Автор: icore2008 22.7.2008, 21:45
Цитата(void* @ 22.7.2008, 21:43)

icore2008, т.е. ты хочешь чтобы на месте надписей "description" были произвольные итемы модели?
Хочу, чтобы на месте "пустого" напротив айтемов item1, item2, item3, item4 во второй колонке можно было разместить айтемы модели
Автор: Litkevich Yuriy 22.7.2008, 21:54
Цитата(icore2008 @ 23.7.2008, 1:45)

Хочу, чтобы на месте "пустого" напротив айтемов item1, item2, item3, item4 во второй колонке можно было разместить айтемы модели
писать надо на русском и так чтобы тебя поняли, перевод с твоего языка нарусский выглядит так:
Цитата
Хочу, чтобы на месте "пустого" напротив элементов item1, item2, item3, item4 во второй колонке можно было разместить элементы модели
вот тебя человек и спрашивает, какие элементы модели? Разъясни.
Автор: icore2008 22.7.2008, 22:01
Цитата(Litkevich Yuriy @ 22.7.2008, 21:54)

...
вот тебя человек и спрашивает, какие элементы модели? Разъясни.
извините - протупил
имелись в виду объкты класса QStandardItem и чтобы они лежали в той же модели, что и иерархия дерева - напротив дочерних айтемов только во второй колонке
Автор: Litkevich Yuriy 22.7.2008, 22:27
я все равно ничего не понял, давай без терминов модель/представление, как визуально должно выглядеть, описать сможешь?
Автор: icore2008 22.7.2008, 22:29
давайте 
хочу, чтобы напротив надписей item1, item2, item3 во второй колонке находились другие надписи
Автор: Litkevich Yuriy 22.7.2008, 22:38
ну тебе надо данные разместить по соответствующим координатам (index'ам) в модели, где-то был простой пример, может у Шлее, вспомню выложу.
Автор: icore2008 22.7.2008, 22:41
спасибо большое, буду ждать
Автор: Litkevich Yuriy 22.7.2008, 22:47
вот помоему нашел, скомпиль проверь.
/* ======================================================================
** main.cpp
** ======================================================================
**
** ======================================================================
** Copyright (c) 2007 by Max Schlee
** ======================================================================
*/
#include <QtGui>
// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QStandardItemModel model(5, 3);
for (int nTopRow = 0; nTopRow < 5; ++nTopRow) {
QModelIndex index = model.index(nTopRow, 0);
model.setData(index, "item" + QString::number(nTopRow + 1));
model.insertRows(0, 4, index);
model.insertColumns(0, 3, index);
for (int nRow = 0; nRow < 4; ++nRow) {
for (int nCol = 0; nCol < 3; ++nCol) {
QString strPos = QString("%1,%2").arg(nRow).arg(nCol);
model.setData(model.index(nRow, nCol, index), strPos);
}
}
}
QTreeView treeView;
treeView.setModel(&model);
treeView.show();
return app.exec();
}
Автор: icore2008 23.7.2008, 8:06
Cпасибо Вам огромнейшее 
Поделитесь, пожалуйста, книжкой Шлее. В Интернете искал, но там либо ссылки битые, либо скачивается архив с книжкой но не до конца, столько трафика убил уже
Автор: Litkevich Yuriy 23.7.2008, 8:15
лучше купи, она того стоит, я на http://www.ozon.ru/context/detail/id/3514931/ покупал
вот http://books.dore.ru/bs/f1bid6240.html список магазинов и цен.
заметь в названии Qt4!
Автор: void* 23.7.2008, 9:21
Цитата(icore2008 @ 22.7.2008, 22:29)

хочу, чтобы напротив надписей item1, item2, item3 во второй колонке находились другие надписи
знаю еще что в QTreeWidget'e для твоего случая такие надписи можно сделать так:
QTreeWidgetItem item;
item.setText(1, "your text"); //1 - номер столбца, отсчет начинается с нуля
Автор: icore2008 23.7.2008, 13:28
Цитата(void* @ 23.7.2008, 9:21)

...
знаю еще что в QTreeWidget'e для твоего случая такие надписи можно сделать так:
QTreeWidgetItem item;
item.setText(1, "your text"); //1 - номер столбца, отсчет начинается с нуля
Спасибо, можно, но у меня модель QStandardItemModel
Автор: icore2008 23.7.2008, 16:35
Интересует вот этот кусочек кода:
model.insertRows(0, 4, index);
model.insertColumns(0, 3, index);
for (int nRow = 0; nRow < 4; ++nRow) {
for (int nCol = 0; nCol < 3; ++nCol) {
QString strPos = QString("%1,%2").arg(nRow).arg(nCol);
model.setData(model.index(nRow, nCol, index), strPos);
Можно ли как-то положить во вновь создаваемые строки и колонки объекты типа QStandardItem?
пробовал
Цитата
void QStandardItemModel::setItem ( int row, int column, QStandardItem * item )
но тут нужно указывать ряд, куда вставлять, а в примере, приведенном Litkevich Yuriy, количество строк в модели, после добавления остаётся равным 5.
Автор: Litkevich Yuriy 23.7.2008, 16:53
посмотри http://crossplatform.ru/documentation/qtdoc4.3/qstandarditemmodel.php#appendRow
может подойдет
Автор: icore2008 23.7.2008, 16:58
Цитата(Litkevich Yuriy @ 23.7.2008, 16:53)

посмотри http://crossplatform.ru/documentation/qtdoc4.3/qstandarditemmodel.php#appendRow
может подойдет
подойдет, но только для добавления к основной модели, а мне нужно именно дочерние QStandardItem
Автор: Litkevich Yuriy 23.7.2008, 17:07
если тебя смутило, то что число строк не меняется, то обрати внимание на исходную функцию:
Цитата
void QStandardItemModel::setItem ( int row, int column, QStandardItem * item )
Sets the item for the given row and column to item. The model takes ownership of the item. If necessary, the row count and column count are increased to fit the item. The previous item at the given location (if there was one) is deleted.
This function was introduced in Qt 4.2.
See also item().
void QStandardItemModel::setItem ( int row, QStandardItem * item )
This is an overloaded member function, provided for convenience.
т.е. "Если необходимо, то число строк и число колонок увеличивается, чтобы разместить элемент"
Автор: icore2008 23.7.2008, 17:12
Цитата(Litkevich Yuriy @ 23.7.2008, 17:07)

если тебя смутило, то что число строк не меняется, то обрати внимание на исходную функцию:
Цитата
void QStandardItemModel::setItem ( int row, int column, QStandardItem * item )
...
т.е. "Если необходимо, то число строк и число колонок увеличивается, чтобы разместить элемент"
хорошо, но как я укажу int row, int column, куда нужно положить айтемы?
после построения модели (добавления рядов и колонок) число строчек не меняется
Проверял qDebug'ом
Автор: Litkevich Yuriy 23.7.2008, 17:19
тебе надо разобратся как работате пример у Макса, и внужное тебе место вставлять елемент, ведь тыже хочешь его кудато конктретно воткнуть.
читал это: "http://crossplatform.ru/documentation/qtdoc4.3/model-view-model.php"?
Автор: icore2008 23.7.2008, 17:28
Цитата(Litkevich Yuriy @ 23.7.2008, 17:19)

тебе надо разобратся как работате пример у Макса, и внужное тебе место вставлять елемент, ведь тыже хочешь его кудато конктретно воткнуть.
читал это: "http://crossplatform.ru/documentation/qtdoc4.3/model-view-model.php"?
Читал, только на английском в ассистанте

хотел переопределить
Цитата
int QAbstractItemModel::rowCount ( const QModelIndex & parent = QModelIndex() ) const [pure virtual]
Но как?
Автор: icore2008 24.7.2008, 15:00
решение нашел в примере Simple Tree Model.
Вполне устраивает
Автор: icore2008 26.7.2008, 12:05
Вроде бы разобрался со вставкой строк и колонок в примере, приведенном Администратором из Книги М.Шлее.
При вставке строк в модель, например строк вставляются вроде бы только строки, но они ничем не заполнены на первый взгляд.
Цитата
bool QAbstractItemModel::insertRows ( int row, int count, const QModelIndex & parent = QModelIndex() ) [virtual]
Далее, в ассистанте идет объяснение:
Цитата
On models that support this, inserts count rows into the model before the given row. The items in the new row will be children of the item represented by the parent model index.
Именно слова выделенные жирным и подсказали мне, что при вставке новых рядов таки создаются айтемы! :-)
Поправьте, пожалуйста, если я неправ :-)
Автор: Litkevich Yuriy 26.7.2008, 12:14
Ну в дереве строки и являются элементами (items) дерева.
А иначе, что такое строки?
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)