Russian Qt Forum

Qt => Вопросы новичков => Тема начата: PavelVX от Сентября 14, 2011, 08:47



Название: Не могу отобразить QStandardItemModel в QTreeView :(
Отправлено: PavelVX от Сентября 14, 2011, 08:47
Взял пример из инета, начал разбираться с QTreeView. Вроде бы ничего сложного. Заполняю модель, проверяю заполнения, вроде бы все нормально. А данные не могу нигде вывести! Где косяк? :(
Код:
    QTreeView * treeView = new QTreeView;
    QStandardItemModel model(4, 3, this);
    QModelIndex index;

    for (int nTopRow = 0; nTopRow < 4; ++nTopRow)
    {
        index = model.index(nTopRow, 0) ;
        model.setData(index, "item" + QString::number(nTopRow + 1));
        model.insertRows(0, 3, index);
        model.insertColumns(0, 2, index);
        for (int nRow = 0; nRow < 3; ++nRow) {
            for (int nCol = 0; nCol < 2; ++nCol) {
                QString strPos = QString("%1,%2,%3").arg(nTopRow).arg(nRow).arg(nCol);
                model.setData(model.index(nRow, nCol, index), strPos);
            }
        }
    }
    qDebug() << model.data(model.index(1, 1, model.index(2,0))); // показывает, что данные в модели есть!

    treeView->setModel(&model);

    QTableView * viewContent = new QTableView;
    viewContent->setModel(&model);


Название: Re: Не могу отобразить QStandardItemModel в QTreeView :(
Отправлено: shirushizo от Сентября 14, 2011, 09:06
после цикла попробуй:
Код:
treeView->reset()


Название: Re: Не могу отобразить QStandardItemModel в QTreeView :(
Отправлено: kambala от Сентября 14, 2011, 09:11
Код
C++ (Qt)
QStandardItemModel *model = new QStandardItemModel(4, 3, this);


Название: Re: Не могу отобразить QStandardItemModel в QTreeView :(
Отправлено: PavelVX от Сентября 14, 2011, 09:29
kambala, спасибо, заработало!
Но тогда, для чайника, объясни пожалуйста, почему не работало?
Два примера таких же нашел, везде сделали без указателей.
Поскольку данный treeview будет привязан к реальным данным, то где и как можно хранить инфу о реальной записи?


Название: Re: Не могу отобразить QStandardItemModel в QTreeView :(
Отправлено: GreatSnake от Сентября 14, 2011, 09:33
model создавалась на стеке - при выходе из области видимости model уничтожалась - азы C++ однако)


Название: Re: Не могу отобразить QStandardItemModel в QTreeView :(
Отправлено: PavelVX от Сентября 14, 2011, 12:06
понял, спасибо! Я потом уже допер, что примеры делались в самой функции main, поэтому модель и не умирала раньше времени :)
А кто-нибудь может подсказать, если пользователь щелкнул по элементу в TreeView, как мне определить индекс в модели?
Что-то роюсь в доках, не могу найти. В основном все обсуждают привязку модели к тривью. Это я сделал грубым перебором. А вот как потом определить рекорд, отвечающий за конкретный элемент тривию непонятно :(


Название: Re: Не могу отобразить QStandardItemModel в QTreeView :(
Отправлено: GreatSnake от Сентября 14, 2011, 12:11
если пользователь щелкнул по элементу в TreeView, как мне определить индекс в модели?
void QAbstractItemView::clicked( const QModelIndex& index ) [signal]


Название: Re: Не могу отобразить QStandardItemModel в QTreeView :(
Отправлено: PavelVX от Сентября 14, 2011, 12:45
все, похоже пора домой, я уже мысль нормально сформулировать не могу.
Код:
   connect(treeView, SIGNAL(clicked(QModelIndex)), this, SLOT(treeViewClick(QModelIndex)));
...
void test::treeViewClick(QModelIndex index)
{
    qDebug() << QString("%1 - %2").arg(index.column()).arg(index.row());
}
При запуске подправленного кода выдет следующее:
item1
   - 0,0,0    0,0,1
   - 0,1,0    0,1,1
   - 0,2,0    0,2,1
item2
   - 1,0,0    1,0,1
   - 1,1,0    1,1,1
   - 1,2,0    1,2,1
и тд.
Это я уже сделал, я вот чего понять не могу: если я щелкаю по item1 у меня
qDebug() << QString("%1 - %2").arg(index.column()).arg(index.row());
выдаст 0 - 0
по 0,0,0 тоже выдаст 0 - 0!
по item2 выдает 0 - 0
по 1, 0, 0 выдает 0 - 0!
Почему???
Должно же быть
по item1 0 - 0, по 0,0,0 должно быть 1 - 1!


Название: Re: Не могу отобразить QStandardItemModel в QTreeView :(
Отправлено: PavelVX от Сентября 15, 2011, 06:24
Всем спасибо за помощь!
В итоге оказалось проще сделать представление через QTreeWidget + QTreeWidgetItem + рекурсия в заполнении + уникальные индексы в редактировании.