Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] Проблема с collapse в QTreeView 
V
    Опции темы
Brodyaga
Дата 18.3.2011, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Всем привет!
Такая проблема, хочу из кода свернуть соответствующий узел дерева, использую для этого
void QTreeView::collapse ( const QModelIndex & index )

Узел не сворачивается, хотя index точно верный, так как проверяю получением из него объекта (QModelIndex::internalPointer)

Также пробовал функцию setExpanded ( const QModelIndex & index, bool expanded ), на работает.

Причём когда использую void QTreeView::collapseAll () всё работает отлично, но сворачиваются ВСЕ узлы, а мне нужны только определённые.

Кто-нибудь сталкивался с подобной проблемой? Как быть?
PM MAIL   Вверх
borisbn
Дата 18.3.2011, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(Brodyaga @  18.3.2011,  16:58 Найти цитируемый пост)
Узел не сворачивается, хотя index точно верный, так как проверяю получением из него объекта (QModelIndex::internalPointer)

Цитата

void * QModelIndex::internalPointer () const
Returns a void * pointer used by the model to associate the index with the internal data structure.

о каком объекте ты говоришь ?

Попробуй след. образом: подцепись на сигнал
void QTreeView::expanded ( const QModelIndex & index )   [signal]
и внутри этого метода вызывай
void QTreeView::collapse ( const QModelIndex & index )
с тем же индексом. "Раскрой" какой-нибудь узел. Он, по идее, должен свернуться обратно.
Если всё так, то ты неверно задаешь index в collapse


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Brodyaga
Дата 18.3.2011, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Цитата

о каком объекте ты говоришь ?


Я делаю дерево на основе своей модели, в internalPointer хранятся мои объекты, при проверке я получаю свой объект и вижу что он тот которому соответствует узел, так что index верный.
PM MAIL   Вверх
_GRIN_
Дата 18.3.2011, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: 6
Всего: 7



QTreeView::collapse() и QTreeView::expand() работают нормально (специально мини-приложение с дизайнером набросал и проверил)
Код

void MainWindow::on_pushButton_clicked()
{
    //collapse
    QModelIndex index = ui->treeWidget->currentIndex();
    if(index.isValid()) {
        QTreeView*view = qobject_cast<QTreeView*>(ui->treeWidget); //что бы продемонстрировать, что используется именно интерфейс QTreeView()
        Q_ASSERT(view);
        view->collapse(index);
    }
}

void MainWindow::on_pushButton_2_clicked()
{
    //expand
    QModelIndex index = ui->treeWidget->currentIndex();
    if(index.isValid()) {
        QTreeView*view = qobject_cast<QTreeView*>(ui->treeWidget); //что бы продемонстрировать, что используется именно интерфейс QTreeView()
        Q_ASSERT(view);
        view->expand(index);
    }
}


Думаю вам стоит копать в сторону неправильного индекса (у меня были подобные проблемы из-за сортировки - но правда не в дереве а в таблице).
Тестовое приложение (на котором проверял) QTreeWidget и две кнопки - в дерево делаешь айтемы (3x3x3) и проверяешь - обработчики в коде выше).

Это сообщение отредактировал(а) _GRIN_ - 18.3.2011, 17:19


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
Brodyaga
Дата 18.3.2011, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Цитата

Попробуй след. образом: подцепись на сигнал
void QTreeView::expanded ( const QModelIndex & index )   [signal]
и внутри этого метода вызывай
void QTreeView::collapse ( const QModelIndex & index )
с тем же индексом. "Раскрой" какой-нибудь узел. Он, по идее, должен свернуться обратно.
Если всё так, то ты неверно задаешь index в collapse


Так работает :(


Цитата

Думаю вам стоит копать в сторону неправильного индекса (у меня были подобные проблемы из-за сортировки - но правда не в дереве а в таблице).


У меня как раз прокси модель поверх обычной положена... Сейчас ещё покопаюсь..
PM MAIL   Вверх
Brodyaga
Дата 18.3.2011, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: нет
Всего: 2



Заработало, оказывается нужно было индекс прокси модели использовать а не приобразовывать его в индекс обычной модели! Всем спасибо, тема закрыта.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0719 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.