![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Elfinit |
![]()
Сообщение
#1
|
Участник ![]() ![]() Группа: Участник Сообщений: 127 Регистрация: 17.3.2009 Из: Казань Пользователь №: 619 Спасибо сказали: 7 раз(а) Репутация: ![]() ![]() ![]() |
Доброго всем времени суток!
У меня 4 вопроса: 1. Есть QTreeWidget. У него, как я понял, по умолчанию есть скрол. Так вот он мне не нужен. Мне надо, чтобы при expand-е или collaps-е меняло размер само дерево,а вертикальный скрол вообще появляться не должен. Как сделать? 2. Никак не хочет появляться горизонтальный скрол( 3. У дерева слишком большие отступы при переходе к очередному уровню. Их можно как-то уменьшить? Желательно, чтобы картинка-branch была прямо под первой буквой родительского узла, а можно даже ещё левее. 4. Можно ли как-то сделать, чтобы вертикальный скрол появлялся не справа, а слева. Соответственно, горизонтальный - не снизу, а сверху. Заранее спасибо)) Сообщение отредактировал Elfinit - 21.12.2009, 11:49
Эскизы прикрепленных изображений
|
|
|
![]() |
DIMEDROLL |
![]()
Сообщение
#2
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 165 Регистрация: 28.9.2008 Из: Киев Пользователь №: 304 Спасибо сказали: 23 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Elfinit |
![]()
Сообщение
#3
|
Участник ![]() ![]() Группа: Участник Сообщений: 127 Регистрация: 17.3.2009 Из: Казань Пользователь №: 619 Спасибо сказали: 7 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
frg10 |
![]()
Сообщение
#5
|
Студент ![]() Группа: Участник Сообщений: 47 Регистрация: 8.11.2009 Из: Ростов-на-Дону Пользователь №: 1213 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
1. Есть QTreeWidget. У него, как я понял, по умолчанию есть скрол. Так вот он мне не нужен. Мне надо, чтобы при expand-е или collaps-е меняло размер само дерево,а вертикальный скрол вообще появляться не должен. Как сделать? Попробуй tree->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 2. Никак не хочет появляться горизонтальный скрол( Подозреваю, что аналогично: setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn) или setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded) |
|
|
Elfinit |
![]()
Сообщение
#6
|
||
Участник ![]() ![]() Группа: Участник Сообщений: 127 Регистрация: 17.3.2009 Из: Казань Пользователь №: 619 Спасибо сказали: 7 раз(а) Репутация: ![]() ![]() ![]() |
в QTree* тоже общий Привожу объясняющие скрины. Блоки "Общее", "Папки" и "Альбомы" лежат на одном ScrollArea. Второй скрин показывает, как это сделано в LightRoom Попробуй tree->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); Не помогает, скрол просто не появляется, но блок не увеличивается. setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn) или setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded) Как я уже только не пробовал) Вообще, погуглив, понял, что это больной вопрос, когда в дереве один столбец. А у меня ещё и элементы дерева - виджеты. Сообщение отредактировал Elfinit - 20.12.2009, 14:21
Эскизы прикрепленных изображений
|
||
|
|||
Litkevich Yuriy |
![]()
Сообщение
#7
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Elfinit, работать должно так:
когда раскрываем подветви поддерева ("folders", "catalog", будем называть поддеревья), то размер поддерева увеличивается в высоту, чтобы содержимое поддерева полностью поместилось. правильно ли я понял? Если так, то Qt Designer версии >=4.5, редактор свойств. Останется только своё оформление навесить и линейку прокрутки перенести в другое место. |
|
|
Elfinit |
![]()
Сообщение
#8
|
Участник ![]() ![]() Группа: Участник Сообщений: 127 Регистрация: 17.3.2009 Из: Казань Пользователь №: 619 Спасибо сказали: 7 раз(а) Репутация: ![]() ![]() ![]() |
"folders", "catalog", будем называть поддеревья Дело в том, что "Общее", "Папки" и "Альбомы" - это не поддеревья, это обычные фрэймы. Переделывать всю левую панельку так, чтобы в ней было одно только дерево-нереально (блок "Папки" появился гораздо позднее остальных и только для него уместна "логика" дерева, в "Альбомы" и "Общее" нет никаких ветвей). Т.о. дерево тут - ТОЛЬКО внутри блока "Папки". Если бы вся панелька была на основе одного дерева - проблемы бы не возникало вообще, скрол бы сам появлялся. А мне нужно, чтобы дерево в "Папки" увеличивалось в размере, сдвигая при необходимости ниже блок "Альбомы". А скрол в левую часть убрать как? На основе обычной Scroll Area никак? Сообщение отредактировал Elfinit - 20.12.2009, 23:13 |
|
|
igor_bogomolov |
![]()
Сообщение
#9
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
4. Можно ли как-то сделать, чтобы вертикальный скрол появлялся не справа, а слева. Соответственно, горизонтальный - не снизу, а сверху. Установи для QScrollArea свойство layoutDirection в Qt::RightToLeft, а для всех его детей Qt::LeftToRight и будет счастье ![]() Цитата 3. У дерева слишком большие отступы при переходе к очередному уровню. Их можно как-то уменьшить? Желательно, чтобы картинка-branch была прямо под первой буквой родительского узла, а можно даже ещё левее. Посмотри на свойство QTreeWidget indentationЦитата 1. Есть QTreeWidget. У него, как я понял, по умолчанию есть скрол. Так вот он мне не нужен. Мне надо, чтобы при expand-е или collaps-е меняло размер само дерево,а вертикальный скрол вообще появляться не должен. Как сделать? Как вариант, скрыть скроллы, ловить сигнал QTreeView::expanded, вычислять размер и делать ресайз
|
|
|
Elfinit |
![]()
Сообщение
#10
|
Участник ![]() ![]() Группа: Участник Сообщений: 127 Регистрация: 17.3.2009 Из: Казань Пользователь №: 619 Спасибо сказали: 7 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
igor_bogomolov |
![]()
Сообщение
#11
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Есть такие методы:
По моему, их вполне достаточно, что бы написать алгоритм подсчета количества отображаемых строк. ![]() |
|
|
Elfinit |
![]()
Сообщение
#12
|
Участник ![]() ![]() Группа: Участник Сообщений: 127 Регистрация: 17.3.2009 Из: Казань Пользователь №: 619 Спасибо сказали: 7 раз(а) Репутация: ![]() ![]() ![]() |
Итак, решение получилось такое:
1. Реализация экспанда/коллапса осуществляется использованием следующих методов:
2-3. Благодаря setIndentation проблема решилась, и необходимость в горизонтальном скроле отпала. 4. setLayoutDirection по методу, описанному igor_bogomolov Сообщение отредактировал Elfinit - 21.12.2009, 11:49 |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 7.6.2025, 6:37 |