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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Глючит выделение некорневых ветвей QTreeView...  (Прочитано 8111 раз)
Cyrax
Гость
« : Января 09, 2008, 23:25 »

При выделении любой из корневых ветвей выделяется вся строка.
При попытке выделения дочерних ветвей выделение охватывает только ту часть строки, которая лежит в пределах первого столбца (т.е. выделяется только одна ячека с именем ветви/элемента). При этом ни одинарный, ни двойной клик по другим ячейкам той же строки (дочернего элемента) не выделяет ячейки, как будто там запрет стоит на выделение...
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Января 10, 2008, 12:21 »

При выделении любой из корневых ветвей выделяется вся строка.
При попытке выделения дочерних ветвей выделение охватывает только ту часть строки, которая лежит в пределах первого столбца (т.е. выделяется только одна ячека с именем ветви/элемента). При этом ни одинарный, ни двойной клик по другим ячейкам той же строки (дочернего элемента) не выделяет ячейки, как будто там запрет стоит на выделение...

Что же тебя все глючит.
Читай документацию.
Проверь свойство allColumnsShowFocus.
По умолчанию оно - false.
Установи в true - и будут выделяться все колонки.
Записан
Cyrax
Гость
« Ответ #2 : Января 10, 2008, 15:54 »

Цитировать
Что же тебя все глючит.
У меня всё глючит...

Цитировать
Проверь свойство allColumnsShowFocus.
По умолчанию оно - false.
Установи в true - и будут выделяться все колонки.
Спасибо, проверю...
Записан
Cyrax
Гость
« Ответ #3 : Января 10, 2008, 16:38 »

Цитировать
Проверь свойство allColumnsShowFocus.
По умолчанию оно - false.
Установи в true - и будут выделяться все колонки.
Нифига. Теперь только серой рамкой вся строка окаймляется. Но синим цветом выделена по-прежнему только часть, ограниченная первым столбцом.
Тогда как для родительских элементов проблем с выделением нет...
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #4 : Января 10, 2008, 19:41 »

Цитировать
Проверь свойство allColumnsShowFocus.
По умолчанию оно - false.
Установи в true - и будут выделяться все колонки.
Нифига. Теперь только серой рамкой вся строка окаймляется. Но синим цветом выделена по-прежнему только часть, ограниченная первым столбцом.
Тогда как для родительских элементов проблем с выделением нет...

Вообще то надо код показать. Что то ты намудрил. Смотри пример с QTreeView - все работает как тебе и надо - $(QTDIR)/examples/itemviews/dirview.
Записан
Cyrax
Гость
« Ответ #5 : Января 10, 2008, 22:12 »

Цитировать
Смотри пример с QTreeView - все работает как тебе и надо - $(QTDIR)/examples/itemviews/dirview
Нет. Там готовый компонент QDir используется. А вмоём случае - QTreeVew.

Взял пример regexpparser из книги "Qt4: Программирование GUI на C++" (10 глава, раздел "Реализация пользовательских моделей"). Добавил в код команду
Цитировать
treeView->setAllColumnsShowFocus(true);
Получаю тот же результат, что и у меня...

В attach'е исходники и картинка.
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #6 : Января 10, 2008, 22:18 »

Цитировать
Смотри пример с QTreeView - все работает как тебе и надо - $(QTDIR)/examples/itemviews/dirview
Нет. Там готовый компонент QDir используется. А вмоём случае - QTreeVew.

Взял пример regexpparser из книги "Qt4: Программирование GUI на C++" (10 глава, раздел "Реализация пользовательских моделей"). Добавил в код команду
Цитировать
treeView->setAllColumnsShowFocus(true);
Получаю тот же результат, что и у меня...

В attach'е исходники и картинка.

Смотри внимательно. Используется имнно QTreeView, а QDir нет , есть модель QDirModel. Но она только предоставляет данные, а отображение -  QTreeView.
Скорее всего у тебя редактируемые поя прописаны, и из-за этого чехарда.
Записан
Cyrax
Гость
« Ответ #7 : Января 10, 2008, 23:34 »

Цитировать
Скорее всего у тебя редактируемые поя прописаны, и из-за этого чехарда.
Что значит, редактируемые поля прописаны ?
У меня флаг редактирования для полей не  установлен, также, как и в примере в attach'е.

Михаил, посмотри пример из attach'а и укажи причину такого поведения при выделении дочерних строк в этом примере. Всё же в том примере разбираться проще, чем в моей программе.
Там - абсолютно та же проблема, что и у меня....
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Января 11, 2008, 02:06 »

setSelectionBehavior(QAbstractItemView::SelectRows) то что нужно.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Cyrax
Гость
« Ответ #9 : Января 11, 2008, 13:14 »

Цитировать
setSelectionBehavior(QAbstractItemView::SelectRows) то что нужно.
Абсолютно никакого эффекта:
Цитировать
ui.FAPAttributesView->setSelectionBehavior(QAbstractItemView::SelectRows);

При этом если указать QAbstractItemView::SelectColumnts, то выделение действительно начинает охватывать весь столбец (в пределах родителя), если указать QAbstractItemView::SelectItems, то выделяется одна ячейка в любом месте (при этом серой рамки вокруг всего ряда нет). Как и должно быть.
А вот в случае с QAbstractItemView::SelectRows по прежнему серая рамка - вокруг всего ряда, а синее выделение - только в пределах первого столбца.

Напрашивается, что это QTreeView такой галимый... Страшно галимый...
Странно, что никто этого раньше не замечал. Вроде бы с QTreeView многие работали...

Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #10 : Января 11, 2008, 16:57 »

Цитировать
setSelectionBehavior(QAbstractItemView::SelectRows) то что нужно.
Абсолютно никакого эффекта:

А вот это ужо не правда!. Все прекрасно работает:

Код:
QStandardItemModel model(0, 3);
QStandardItem *parentItem = model.invisibleRootItem();
for (int row = 0; row < 4; ++row) {
QStandardItem *group = new QStandardItem(QString("item %1").arg(row));
for (int column = 0; column < 3; ++column) {
QStandardItem *item = new QStandardItem(QString("row 0, column %1").arg(column));
group->setChild(0, column, item);
}
parentItem->appendRow(group);
parentItem = group;
}

QTreeView *view = new QTreeView();
view->setSelectionBehavior(QAbstractItemView::SelectRows);
view->setModel(&model);
view->show();


Какая версия Qt? Код создания дерева в студию.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Cyrax
Гость
« Ответ #11 : Января 11, 2008, 22:53 »

pastor, у тебя это QStandartItemModel. У меня же представление отдельно.
Так может и работает, но у меня не работает:
Цитировать
ui.FAPAttributesView->setModel(this->FAPAttributesModel);
ui.FAPAttributesView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui.FAPAttributesView->setAllColumnsShowFocus(true);
ui.FAPAttributesView->setAnimated(true);   
ui.FAPAttributesView->collapseAll();
ui.FAPAttributesView->expandAll();

Ничего особенного.

Так можно бесконечно гадать над причинами глюка.
Единственная возможность прояснить ситуацию - взять исходники regexpparser'а (несколько постов назад) и изменить их код так, чтобы выделение там стало нормальным. Сейчас там та же проблема, что и у меня...
Записан
ритт
Гость
« Ответ #12 : Января 12, 2008, 18:12 »

с кустандартайтеммодель работает нормально - стоило бы отнаследоваться от неё, а не от абстрактной модели (если задача схожа по простоте с регэксппарсером)...
если кликать по второму столбцу, то выделение устанавливается только для корневой ноды, а для дочерних - только фокус без выделения строки в первом столбце - стоит проверить как селекшионмодель реагирует на селектРов и т.п.
почти уверен, что это - не баг троллей
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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