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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не могу отобразить QStandardItemModel в QTreeView :(  (Прочитано 5951 раз)
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);
Записан
shirushizo
Гость
« Ответ #1 : Сентябрь 14, 2011, 09:06 »

после цикла попробуй:
Код:
treeView->reset()
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Сентябрь 14, 2011, 09:11 »

Код
C++ (Qt)
QStandardItemModel *model = new QStandardItemModel(4, 3, this);
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
PavelVX
Гость
« Ответ #3 : Сентябрь 14, 2011, 09:29 »

kambala, спасибо, заработало!
Но тогда, для чайника, объясни пожалуйста, почему не работало?
Два примера таких же нашел, везде сделали без указателей.
Поскольку данный treeview будет привязан к реальным данным, то где и как можно хранить инфу о реальной записи?
« Последнее редактирование: Сентябрь 14, 2011, 09:36 от PavelVX » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Сентябрь 14, 2011, 09:33 »

model создавалась на стеке - при выходе из области видимости model уничтожалась - азы C++ однако)
Записан

Qt 5.11/4.8.7 (X11/Win)
PavelVX
Гость
« Ответ #5 : Сентябрь 14, 2011, 12:06 »

понял, спасибо! Я потом уже допер, что примеры делались в самой функции main, поэтому модель и не умирала раньше времени Улыбающийся
А кто-нибудь может подсказать, если пользователь щелкнул по элементу в TreeView, как мне определить индекс в модели?
Что-то роюсь в доках, не могу найти. В основном все обсуждают привязку модели к тривью. Это я сделал грубым перебором. А вот как потом определить рекорд, отвечающий за конкретный элемент тривию непонятно Грустный
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Сентябрь 14, 2011, 12:11 »

если пользователь щелкнул по элементу в TreeView, как мне определить индекс в модели?
void QAbstractItemView::clicked( const QModelIndex& index ) [signal]
Записан

Qt 5.11/4.8.7 (X11/Win)
PavelVX
Гость
« Ответ #7 : Сентябрь 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!
Записан
PavelVX
Гость
« Ответ #8 : Сентябрь 15, 2011, 06:24 »

Всем спасибо за помощь!
В итоге оказалось проще сделать представление через QTreeWidget + QTreeWidgetItem + рекурсия в заполнении + уникальные индексы в редактировании.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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