Название: Эмуляция доков сплиттерами Отправлено: Авварон от Июня 09, 2011, 20:49 У меня есть задача - на табе разместить интерфейс, похожий на доки - то есть 5 областей (4 вокруг и 1 в центре). Нагромоздил я кучу сплиттеров и возник косяк - если область ничего не содержит (при этом сама является сплиттером), то у ее парент сплиттера рисуется хэндл, несмотря на то, что размер области 0. Как бороться?
Сплиттер считает вложенный сплиттер полноценным виджетом и хз как заставить его хайдить хэндл в случае, если вложенный сплиттер пуст. Проблема что при попытке хайдить вложенные сплиттеры им перестают приходить эвенты от реальных виджетов (типа ShowToParent приходит самому верхнему ВИДИМОМУ виджету). Название: Re: Эмуляция доков сплиттерами Отправлено: GreatSnake от Июня 10, 2011, 06:53 Может для лучшего понимания проблемы покажешь скриншот?
И чем не устроил QMainWindow с доками? Название: Re: Эмуляция доков сплиттерами Отправлено: Авварон от Июня 10, 2011, 09:26 Черные полоски вокруг - это хэндлы сплиттеров (по идее они 1 пиксель толщиной, но для наглядности сделал 7). Собсно над верхней полоской, справа от правой и т.п. могут как быть, так и не быть виджеты. Расположение сплиттеров (на топ левеле - вертикальный, в нем 3 горизонтальных. В центральном горизонтальном еще 3 вертикальных сплиттера)
Код: --- Доки не устроили тем, что мне надо доки в табе, а в табе надо еще и стакед лэйаут. А тролли захардкодили док лэайут в мейнвиндоу. Это можно эмулировать используя флаг при компиляции Qt EXPERIMENTAL_USER_DECORATIONS, чтобы разместить таббар ВНЕ доков, но наличие этой фичи всё еще под вопросом, кроме того приходится эмулировать иерархию таб->стакед->доки. Когда-нибудь, когда у меня будет много времени, я перепишу кьютовские доки в отдельный виджет. Название: Re: Эмуляция доков сплиттерами Отправлено: GreatSnake от Июня 10, 2011, 11:08 Цитата: Авварон Доки не устроили тем, что мне надо доки в табе, а в табе надо еще и стакед лэйаут. А тролли захардкодили док лэайут в мейнвиндоу. Это можно эмулировать используя флаг при компиляции Qt EXPERIMENTAL_USER_DECORATIONS, чтобы разместить таббар ВНЕ доков, но наличие этой фичи всё еще под вопросом, кроме того приходится эмулировать иерархию таб->стакед->доки. Не вижу проблемы использования QMainWindow и табов. Вешаешь QTabBar, под ним QMainWindow. На последний накидываешь QDockWidget-s.Вот примерно так: Код
PS: исправил удаление. Название: Re: Эмуляция доков сплиттерами Отправлено: Авварон от Июня 10, 2011, 11:21 Мог не писать код, я в курсе про этот способ. Он также черезжопный, есть артефакты рисования у QMainWindow если его класть как виджет. Ну и плюс оверхед в виде тулбаров/статусбаров/менюбаров, их лэйаутов и тп.
Название: Re: Эмуляция доков сплиттерами Отправлено: GreatSnake от Июня 10, 2011, 11:31 Мог не писать код, я в курсе про этот способ. Ты описал надуманную проблему про QMainWindow/QTabBar/QStackWidget - я пытался объяснить обратное)Цитировать Он также черезжопный, есть артефакты рисования у QMainWindow если его класть как виджет. На X11/Win не видел. Может на маке и есть.Цитировать Ну и плюс оверхед в виде тулбаров/статусбаров/менюбаров, их лэйаутов и тп. Нашел на чём экономить) Тем более они в таком случае не создаются.Название: Re: Эмуляция доков сплиттерами Отправлено: GreatSnake от Июня 10, 2011, 11:41 Цитата: Авварон Проблема что при попытке хайдить вложенные сплиттеры им перестают приходить эвенты от реальных виджетов (типа ShowToParent приходит самому верхнему ВИДИМОМУ виджету). Кстати, а не пробовал у соответствующего QSplitterHandle установить width/height в 0?Название: Re: Эмуляция доков сплиттерами Отправлено: Авварон от Июня 10, 2011, 11:46 У меня проблема в том, чтобы узнать - есть там что-то или нет:) То есть я не смог подобрать эвент, при котором бы стоило делать проверку на то, что чайлды сплиттера визибл.
Сейчас проблему решил по-тупому - мануально сделал метод hideArea(int) к-й прячет область (:)). Это еще и плюшку дает что можно юзеру хайдить не отдельный "док" а всю панель целиком. Второй вариант ще более тупой, изначально прятать сплиттеры, а показывать при добавлении в них виджета. Но это не спасет от той же проблемы, если виджет "закроют" и сплиттер будет визуально пустой. Название: Re: Эмуляция доков сплиттерами Отправлено: GreatSnake от Июня 10, 2011, 11:53 Перегрузи
Код и показывай/прячь соответствующий QSplitterHandle, если добавили/удалили чайлд. Название: Re: Эмуляция доков сплиттерами Отправлено: Авварон от Июня 10, 2011, 12:14 Да, в QObject-то я не заглянул:) Лан, спасибо, но наверно уже не буду экспериментировать.
|