Здравствуйте, гость ( Вход | Регистрация )
Elfinit | Дата 21.12.2009, 11:45 |
Итак, решение получилось такое: 1. Реализация экспанда/коллапса осуществляется использованием следующих методов:
2-3. Благодаря setIndentation проблема решилась, и необходимость в горизонтальном скроле отпала. 4. setLayoutDirection по методу, описанному igor_bogomolov |
|
igor_bogomolov | Дата 21.12.2009, 10:24 |
Есть такие методы:
По моему, их вполне достаточно, что бы написать алгоритм подсчета количества отображаемых строк. |
|
Elfinit | Дата 21.12.2009, 10:09 |
вычислять размер А как подсчитать количество отображённых в данный момент "строк"? |
|
igor_bogomolov | Дата 21.12.2009, 9:22 |
4. Можно ли как-то сделать, чтобы вертикальный скрол появлялся не справа, а слева. Соответственно, горизонтальный - не снизу, а сверху. Установи для QScrollArea свойство layoutDirection в Qt::RightToLeft, а для всех его детей Qt::LeftToRight и будет счастье Цитата 3. У дерева слишком большие отступы при переходе к очередному уровню. Их можно как-то уменьшить? Желательно, чтобы картинка-branch была прямо под первой буквой родительского узла, а можно даже ещё левее. Посмотри на свойство QTreeWidget indentationЦитата 1. Есть QTreeWidget. У него, как я понял, по умолчанию есть скрол. Так вот он мне не нужен. Мне надо, чтобы при expand-е или collaps-е меняло размер само дерево,а вертикальный скрол вообще появляться не должен. Как сделать? Как вариант, скрыть скроллы, ловить сигнал QTreeView::expanded, вычислять размер и делать ресайз |
|
Elfinit | Дата 20.12.2009, 23:12 |
"folders", "catalog", будем называть поддеревья Дело в том, что "Общее", "Папки" и "Альбомы" - это не поддеревья, это обычные фрэймы. Переделывать всю левую панельку так, чтобы в ней было одно только дерево-нереально (блок "Папки" появился гораздо позднее остальных и только для него уместна "логика" дерева, в "Альбомы" и "Общее" нет никаких ветвей). Т.о. дерево тут - ТОЛЬКО внутри блока "Папки". Если бы вся панелька была на основе одного дерева - проблемы бы не возникало вообще, скрол бы сам появлялся. А мне нужно, чтобы дерево в "Папки" увеличивалось в размере, сдвигая при необходимости ниже блок "Альбомы". А скрол в левую часть убрать как? На основе обычной Scroll Area никак? |
|
Litkevich Yuriy | Дата 20.12.2009, 15:47 |
Elfinit, работать должно так: когда раскрываем подветви поддерева ("folders", "catalog", будем называть поддеревья), то размер поддерева увеличивается в высоту, чтобы содержимое поддерева полностью поместилось. правильно ли я понял? Если так, то Qt Designer версии >=4.5, редактор свойств. Останется только своё оформление навесить и линейку прокрутки перенести в другое место. |
|
Elfinit | Дата 20.12.2009, 14:24 |
в QTree* тоже общий Привожу объясняющие скрины. Блоки "Общее", "Папки" и "Альбомы" лежат на одном ScrollArea. Второй скрин показывает, как это сделано в LightRoom Попробуй tree->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); Не помогает, скрол просто не появляется, но блок не увеличивается. setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn) или setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded) Как я уже только не пробовал) Вообще, погуглив, понял, что это больной вопрос, когда в дереве один столбец. А у меня ещё и элементы дерева - виджеты. |
|
frg10 | Дата 20.12.2009, 13:51 |
1. Есть QTreeWidget. У него, как я понял, по умолчанию есть скрол. Так вот он мне не нужен. Мне надо, чтобы при expand-е или collaps-е меняло размер само дерево,а вертикальный скрол вообще появляться не должен. Как сделать? Попробуй tree->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 2. Никак не хочет появляться горизонтальный скрол( Подозреваю, что аналогично: setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn) или setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded) |
|
Litkevich Yuriy | Дата 20.12.2009, 12:59 |
общий скрол. что значит общий, в QTree* тоже общий |
|
Elfinit | Дата 20.12.2009, 11:09 |
это как? приведи пример, где такое уже есть? Если бы я знал, как - вопрос бы не возник)) Пример, где это уже есть - Лайтрум. Там на всю левую панельку - общий скрол. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 27.4.2024, 18:21 |