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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTreeView - прокрутка не показывает всю строку. Есть ли решение? Скрин прилагаю.  (Прочитано 11287 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Июнь 16, 2008, 21:47 »

Здравствуйте!


Вот тут только что обнаружил неприятную особенность QTreeView - этот объект не хочет горизонтально скроллироваться, чтобы видеть концы длинных строк.

Вот скрин



Видно, что прокрутка не сдвигается (она почему-то шириной в весь виджет). А концов строк невидно. И это еще маленькое дерево, а если веток будет больше, то вообще неясно как работать. Кстати, вертикальная прокрутка работает нормально.

На скрине запечатлен момент, когда horisontalScrollBarPolicy=ScrollBarAlwaysOn. Если это свойство ставить в ScrollBarAsNeeded, то при сужении области объекта, горизонтальная прокрутка автоматически появляется тогда, когда она уже не нужна. Т.е. "длинные" ветки остались справа, их уже не видно. И в этот момент появляется прокрутка. Которая, в общем то, прокручивает очень мало - то что остатся справа увидеть невозможно.

Все прочие параметры прокрутки оставлены те, которые выставляются при добавлении QTreeView на форму в дезигнере. Я, конечно, поигрался с разными параметрами, но результата не достиг.


Вопрос - можно ли сделать нормальную горизонтальную прокрутку в объекте QTreeView, так, чтобы были видны полностью длинные строки дерева? Как настроить?
Записан

Собираю информацию по крупицам
http://webhamster.ru
ритт
Гость
« Ответ #1 : Июнь 17, 2008, 02:46 »

вроде бы, таска 210390 была о чём-то подобном (не уверен)
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Июнь 17, 2008, 04:56 »

а она (прокрутка) и не должна показывать, она свою задачу выполнила - показала весь столбец.
Растяни столбец по ширине содержимого, и линейка прокрутки позволит прокручивать дальше.
Записан

Юра.
Sergeich
Гость
« Ответ #3 : Июнь 17, 2008, 10:57 »

treeView->header()->setResizeMode(QHeaderView::ResizeToContents)
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #4 : Июнь 17, 2008, 17:11 »

treeView->header()->setResizeMode(QHeaderView::ResizeToContents)

Нет, не помогает. Вроде, по описанию - ResizeToContents то что нужно. Но растягивание ширины столбца всеравно ограничивается шириной объекта. И прокрутка не появляется.

В этом режиме ResizeToContents еще и невозможно мышкой расширить столбец за пределы оъекта, т.к. данный режим отменяет Interactive. Пропробовал режим Stretch, но это тоже не то - он просто расширяет автоматом столбец с деревом если есть свободное пространство.


Во, нашел. Надо делать

Код:
treeView->resizeColumnToContents(0);

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

Попробовал засунуть вызов в слоты update() и в repaint(), но эти слоты при интерактивном изменении не вызываются. Попробовал даже вначале программы включить разрешение вызова udate()

Код:
treeView->setUpdatesEnabled(true);

но тоже толку нет.


Вопрос - какой слот надо использовать в QTreeView, чтобы он вызывался при любом визуальном и программном изменении дерева?
Записан

Собираю информацию по крупицам
http://webhamster.ru
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Июнь 17, 2008, 17:19 »

На данный вопрос не могу ответить. А вот как отловить перемещение при помощи клавы... Есть у QTreeView усть селекшнмодель, у которой в свою очередь есть сигнал изменения селекшина. Должно помочь.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ритт
Гость
« Ответ #6 : Июнь 17, 2008, 18:28 »

Вроде, по описанию - ResizeToContents то что нужно. Но растягивание ширины столбца всеравно ограничивается шириной объекта. И прокрутка не появляется.

В этом режиме ResizeToContents еще и невозможно мышкой расширить столбец за пределы оъекта, т.к. данный режим отменяет Interactive. Пропробовал режим Stretch, но это тоже не то - он просто расширяет автоматом столбец с деревом если есть свободное пространство.


Во, нашел. Надо делать

Код:
treeView->resizeColumnToContents(0);

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

попробуй патчик в аттаче
надеюсь, не пугает, что придётся пересобрать модуль гуи ) /* make sub-src */
Записан
crocus
Гость
« Ответ #7 : Июнь 17, 2008, 18:29 »

Код:
treeView->resizeColumnToContents(0);
Тоже думал, что это поможет - однако нет.
З.Ы 4.4.1-20080414
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #8 : Июнь 17, 2008, 22:05 »

Код:
treeView->resizeColumnToContents(0);
Тоже думал, что это поможет - однако нет.
З.Ы 4.4.1-20080414

Може, что неправильно делаешь? Оно помогает только _после_ вызова. То есть, изменилось что на экране - надо дергать resizeColumnToContents(). И так каждый раз. У меня работает на Qt 4.3.0.
Записан

Собираю информацию по крупицам
http://webhamster.ru
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #9 : Июнь 17, 2008, 22:15 »

попробуй патчик в аттаче

Спасибо конечно, но

надеюсь, не пугает, что придётся пересобрать модуль гуи ) /* make sub-src */

Вообще-то пугает. Не понимаю смысл сего действия! Это значит, я у себя в Qt либе что-то исправляю. И у меня интерфейс начинает работать согласно исправлениям. А когда я отдам прогу пользователям, что произойдет? У них будет работать по-другому? Пользователи тоже должны будут устанавливать исходники, патчить Qt либу, потом пересобирать ее чтобы получился аналогичный результат???
Записан

Собираю информацию по крупицам
http://webhamster.ru
ритт
Гость
« Ответ #10 : Июнь 17, 2008, 22:29 »

да.
но есть ещё один аспект - если с патчем будет работать как требуется, на его основе можно сделать воркэроунд...
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #11 : Июнь 18, 2008, 18:55 »

Цитировать
Это значит, я у себя в Qt либе что-то исправляю. И у меня интерфейс начинает работать согласно исправлениям. А когда я отдам прогу пользователям, что произойдет? У них будет работать по-другому? Пользователи тоже должны будут устанавливать исходники, патчить Qt либу, потом пересобирать ее чтобы получился аналогичный результат???
да.

Ну и кому такая прога нужна будет??? Извините за то что щас скажу (я хорошо отношусь и к этому форуму, и к вам как спецу и модератору, и к тому что вы не поленились и патчик прислали, и к тому что на форуме хорошая творческая атмосфера, причем это заслуга и модераторов и пользователей, за это все спасибо). Но более уродскую залипуху придумать слоооожно. Сделать так - значит обеспечить, что программой вообще никто не будет пользоваться. Когда я натыкаюсь на такие программы, которые хренпаймешь как устанавливать надо, которые требуют определенной версии либ, докачки чего-то с CPAN, или как в XMMS, патчик на ядро просят наложить, или еще что-то дикое, меня это вымораживает! Я готов плюнуть разработчику в лицо и сказать - больше непиши, иди на стройку работать, тупая скатина! Что тебе мешало положить перловые модули нужных версий рядом со своими скриптами? Этож как тормозится развитие линуха, что люди не могут просто программу установить. Никакого желания так ёбстись с устновкой программ у нормального человека возникнуть не может! Значит, эта тупорылая тварь написала свое поделие не для людей, а для каких-то блин... биороботов в вакууме! Пусть такому разработчику космонавты на голову насрут! Уродцу этому моральному.. Пусть кажый день срут, пока не поумнеет!


но есть ещё один аспект - если с патчем будет работать как требуется, на его основе можно сделать воркэроунд...

А вот тут поподробнее, что имеется в виду под "воркэроунд"?
Записан

Собираю информацию по крупицам
http://webhamster.ru
ритт
Гость
« Ответ #12 : Июнь 19, 2008, 11:02 »

улыбнуло Улыбающийся
только "насрут" - это как-то грубо...

попробуй патч. если поможет, отменишь его и на его основе сделаешь наследника тривью в который ставишь подобный код - до момента исправления сможешь использовать свою тривьюху - и не потребуется патченная кутя.
я не уверен, что твоя проблема именно в той баге, которую исправляет данный патч, но похоже на то (http://trolltech.com/developer/task-tracker/index_html?id=210390&method=entry).
Записан
crocus
Гость
« Ответ #13 : Июнь 19, 2008, 12:42 »

Цитировать
This will  happen for example, if the header is not visible
Мой случай - точно.
Записан
ритт
Гость
« Ответ #14 : Июнь 19, 2008, 13:07 »

вот и брат по несчастью нашёлся )

а ксинтрея'у ещё добавлю: в данный момент кде4.1 разрабатывается на основе кутэ4.4.0/4.4.1. порой кдешники натыкаются на такие грабли в кутях, что пока приходится патчить стабильную ветку до тех пор, пока не выйдет исправление (примерно до 4.4.2).
я бы не торопился отправлять кдешников работать на стройке. кстати, приведённый патч также из репозитариия кде...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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