Здравствуйте, гость ( Вход | Регистрация )
Litkevich Yuriy | Дата 4.3.2009, 5:50 |
из изменений в 4.5.0: Цитата - QMainWindow тык* added API to know which dock widgets are tabified together with a dock widget |
|
Litkevich Yuriy | Дата 27.12.2008, 14:00 |
Стоит в вики внести оба варианта, с reinterpret как дополнительный ? если есть желание напиши в ЧаВо |
|
SABROG | Дата 27.12.2008, 13:35 |
что значит исчезает? Если два доквиджета сложены вкладками и одному скомандывать hide(), то его вкладка исчезнет - виджет спрячится и isVisible() вернет "ложь" Я еще вчера посмотрел, в QTabWidget используется QStackedWidget, а он ничего не хайдит. В общем все понятно. ну как видишь отображается в первом блочке стандартных С++ных слов только два: this и bool Скудная подсветка просто, сразу не понял, другие хайлайтеры и скобочками со звездочками перекрашивают. А по теме есть что-нибудь ? Думаю менеджер классов делать бессмысленно, если есть динамические свойства. Стоит в вики внести оба варианта, с reinterpret как дополнительный ? |
|
Litkevich Yuriy | Дата 27.12.2008, 0:51 |
Просто по логике, если окно исчезает, значит оно должно хайдиться чтоли что значит исчезает?Если два доквиджета сложены вкладками и одному скомандывать hide(), то его вкладка исчезнет - виджет спрячится и isVisible() вернет "ложь" При выборе cpp подсветка не отображается вообще ну как видишь отображаетсяв первом блочке стандартных С++ных слов только два: this и bool |
|
SABROG | Дата 26.12.2008, 23:23 |
SABROG, чёто с форматированием, как-то все плохо isVisible() этот метод имеет связь с методами show() и hide(), т.е. для определения виден ли пользователю определенно не подходитдля С++ кода надо использовать параметр в тэге код: [code=cpp][/code] С форматированием беда какая-то. При выборе cpp подсветка не отображается вообще. Если же пользовать "Код с подсветкой" вместо "Код", то код почему-то идентифицируется как perl, при том, что я указал cpp. Но даже в perl подсвечиваются только 2 слова. Еще текст весь поломался из-за того, что я не заметил закрытый тег код, который не открывал. Просто по логике, если окно исчезает, значит оно должно хайдиться чтоли Надо посмотреть как это организовано в QTabWidget. |
|
Litkevich Yuriy | Дата 26.12.2008, 23:19 |
SABROG, чёто с форматированием, как-то все плохо isVisible() этот метод имеет связь с методами show() и hide(), т.е. для определения виден ли пользователю определенно не подходитдля С++ кода надо использовать параметр в тэге код: [code=cpp][/code] |
|
SABROG | Дата 26.12.2008, 23:12 |
В общем решил развить тему сигнала visibilityChanged. На этот раз метод должен работать везде, т.к. привязки к нестандартным вещам нет В конструкторе соединями сигналы каждого QDockWidget'а к одному слоту. Можно соединять вручную поименно каждый виджет, как удобнее. Просто с учетом на будущее я решил пробежаться по всем детишкам, мало ли добавится еще пара окон.
Наш слот. Хочу заметить, что он вызывается для каждого доквиджета при открытии главного окна с параметром true. Далее при перетаскивании любого доквиджета слот вызывается 4 раза. Сначала доквиджет скрывается (false), появляется плавающее окно (true), когда перетаскивание завершается, плавающий доквиджет скрывается (false), и вновь отображается уже в доке (true). При складывании доквиджетов в таббар приходят наши две пары сигналов плюс еще пара сигналов, всего 6 сигналов для одного виджета. Кроме этого приходит еще один сигнал с того виджета, который скрывается под перетащенным.
Логика следующая. Мы добавляем динамический параметр к каждому QDockWidget'у, который отображает его текущее состояние. В любой момент можно будет узнать какой доквиджет в данный момент не скрыт. По сути это аналог параметру visible у QWidget, но по неизвестным мне причинам он не работает. Отладочный вывод это показывает на последних строчках.
Пока я не затрагиваю тему управления QTabBar'ом. Как вам такой вариант решения ? |
|
SABROG | Дата 26.12.2008, 14:03 |
прошу прощения в Qt 4.4.3. есть int QTabBar::currentIndex()const; void QTabBar::currentChanged(int);[signal] очепятка вышла. Опять же. Ты не можешь стандартными методами QMainWindow получить указатели на QTabBar'ы. И полученные сигналы и индексы бесполезны, если нет возможности связать их с конкретными виджетами. |
|
kwisp | Дата 26.12.2008, 13:48 |
не поможет? Совершенно. QMainWindow использует QTabBar'ы, не QTabWidget'ы. А в QTabBar'е есть только currentIndex. Но опять же стандартными методами через QMainWindow невозможно получить список указателей на QTabBar'ы, если таковые существуют. А их может и не быть, если пользователь не манипулировал с доками. SABROG, вобщем, тему стоит пожевать и найти решение. Я думаю надо делать либо класс "организатор", либо наследника более умного от QDockWidget. Если делать умного наследника от QDockWidget'а, то что это должно дать ? Проверку типа isTopWidget() ? Класс организатор тоже решение. Хоть и правильное решение с точки зрения программирования, но достаточно непростое и скорее смахивает на затычку. По-хорошему надо написать и класс-менеджер и добавить в таск-лист троллям, что хотелось бы иметь подобную возможность. Т.е. добавить методы для QMainWindow и доп.класс типа QDockTabBar на базе QTabBar: QList <QDockTabBar *> QMainWindow::dockTabBars() const Для класса QDockTabBar метод: QDockWidget * QDockTabBar::currentWidget() const void QDockTabBar::setCurrentWidget(QDockWidget *dw) Может еще какие-то. прошу прощения в Qt 4.4.3. есть int QTabBar::currentIndex()const; void QTabBar::currentChanged(int);[signal] очепятка вышла. |
|
SABROG | Дата 26.12.2008, 13:34 |
Я предлагаю не ограничиваться только этой задачей. Т.к. переключение табов, добавление, удаление виджета из/в таб/а програмным методом было бы тоже интересно. Правда я не пробывал, возможно ли сейчас сложить в табы выбранные доквиджеты програмным методом ? Это надо move() делать на заданные координаты или флаги какие устанавливать ? | |
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 13:50 |