crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QTreeView, Разворачивание по двойному щелчку.
Letis
  опции профиля:
сообщение 1.10.2014, 14:13
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 1.10.2014
Пользователь №: 4237

Спасибо сказали: 0 раз(а)




Репутация:   0  


Хочу добиться от QTreeView элементарно очевидных действий - сворачивания/разворачивания item-ов по Enter -у или двойному клику. Указатель на QTreeView-экземпляр у меня является полем моего большого(главного) виджета. В этом главном виджете есть слот который принимает QModelIndex проверяя его через isExpanded закрывает или открывает item. На него я навесил сигналы "дерева" doubleClicked и activated. Реакция такова - Enter работает исправно, а вот двойной клик работает исключительно при щелчке на 0-ом столбце. Всего столбцов 3 и при щелчке на 1 и 2 они раскрываются, но закрываться не хотят. Поведение хоть и приемлемое, но странное. Мне до жути интересно почему именно так?

Вот чуть чуть кода на всякий случай(если ещё какие-нибудь кусочки необходими для понимания - выложу):
Это в конструкторе прописано:
connect(tree, SIGNAL(doubleClicked(QModelIndex)), SLOT(expander(QModelIndex)));
connect(tree, SIGNAL(activated(QModelIndex)), SLOT(expander(QModelIndex)));


А это собственно сам слот:
void CONVERTER::expander(QModelIndex index)
{    
    if (tree->isExpanded(index)) tree->collapse(index);
    else tree->setExpanded(index, true);
}

Сразу говорю пробовал и expand и collapse и setExpanded (index, true/false).

ЗЫ.: Есть мысли на тему, что что-то там конфликтует из-за того что doubleClicked скорее всего и activated отправляет. Но почему в 0 колонке его всё устраивает, а 1 и 2 закрываться не хотят? А почему 1 и 2 именно открываются, но ни в какую не закрываются?

Ой. Чуть чуть приврал. :-) В том варианте слота на щелчки по 1 и 2 колонке в принципе не дают реакции. Описанное поведение наблюдается при таком слоте:
void CONVERTER::expander(QModelIndex index)
{    
    if (index.column() != 0)
        index= model->index(index.row(), 0, index.parent());
    if (tree->isExpanded(index)) tree->collapse(index);
    else tree->setExpanded(index, true);
}


ЗЗЫ: Блин Совсем замотался. Всё правильно изначально. 2-ой вариант (с проверкой столбца) = нет реакции на 1 и 2 колонке. Без проверки = 1 и 2 только открываются. Да. Вот Точно :-)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.4.2024, 6:31