Здравствуйте, гость ( Вход | Регистрация )
|
SABROG |
26.12.2008, 0:01
Сообщение
#1
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34
|
Сегодня озадачился таким вопросом. Как получить текущий QDockWidget, который отображается в QTabBar'e на MainWindow. Т.е. это QDockWidget'ы положенные друг на друга таким образом, что появляются ярлычки как в QTabWidget. Но проблема в том, что это QTabBar и у него нет метода типа QTabWidget::currentWidget(). Более того, по сути эти QTabBar'ы не принадлежат нам и получить на них указатели стандартными средствами QMainWindow мы не можем. Также напрашивается решение - пробежаться по всем QDockWidget'ам и найти те, которые не спрятаны (isVisible). Со слов другого человека этот вариант не работает, т.к. у всех виджетов метод isVisible возвращает true. Также я предложил вариант проверить x,y,width,height. Если у двух виджетов они одинаковы, значит они лежат друг на друге, а следовательно в "стеке" (QMainWindow не использует ни один из вариантов стека виджетов или лэйаутов). Но оказалось, что у видимых QDockWidget'ов координаты положительные, в то время как у скрытых за ними виджетами они отрицательные. Т.е. этот способ можно использовать, но выглядит он не очень надежным. В итоге этот вопрос привел меня к следующему решению.
Сразу хочу предупредить, что этот вариант может не работать на других версиях Qt, т.к. в них может быть уже по другому реализован класс QMainWindow/QDockWidget. Логика кода следующая. Ищем все видимые QTabBar'ы и получаем указатель на QDockWidget, который в данный момент показывается пользователю (тоже самое что и QTabWidget::currentWidget()). ![]() --- Я не помещаю решение в Вики из-за того, что оно по сути - хак (если администрация даст добро, то помещу) и хотелось бы услышать мнения людей, может быть от меня ускользнули очевидные вещи. Сообщение отредактировал SABROG - 26.12.2008, 0:20 |
|
|
|
![]() |
|
SABROG |
26.12.2008, 14:03
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34
|
Цитата(kwisp @ 26.12.2008, 13:48) Link прошу прощения в Qt 4.4.3. есть int QTabBar::currentIndex()const; void QTabBar::currentChanged(int);[signal] очепятка вышла. Опять же. Ты не можешь стандартными методами QMainWindow получить указатели на QTabBar'ы. И полученные сигналы и индексы бесполезны, если нет возможности связать их с конкретными виджетами. |
|
|
|
SABROG Как получить текущий QDockWidget, который отображается в QTabBar'e на MainWindow 26.12.2008, 0:01
Litkevich Yuriy Цитата(SABROG @ 26.12.2008, 3:01) хочу пр... 26.12.2008, 0:18
SABROG Windows XP Professional SP3 (2002 build)
MinGW 3.4... 26.12.2008, 0:22
Litkevich Yuriy может я что-то не понял, но узнать видимый или нет... 26.12.2008, 0:40
SABROG Тоже вариант, правда неудобный. Придется создавать... 26.12.2008, 9:14
kwisp в Qt 4.4.3. есть
int QTabWidget::currentIndex()c... 26.12.2008, 10:16
Litkevich Yuriy SABROG, вобщем, тему стоит пожевать и найти решени... 26.12.2008, 10:54
SABROG Цитата(kwisp @ 26.12.2008, 10:16) не помо... 26.12.2008, 12:12
kwisp Цитата(SABROG @ 26.12.2008, 12:12) Цитата... 26.12.2008, 13:48
Litkevich Yuriy SABROG, давай еще раз формулировку задачи.
Положим... 26.12.2008, 12:37
SABROG Предположим ситуацию. У пользователя есть доквидже... 26.12.2008, 13:15
Litkevich Yuriy в итоге: список видимых (или тех, что сверху) в да... 26.12.2008, 13:23
SABROG Я предлагаю не ограничиваться только этой задачей.... 26.12.2008, 13:34
SABROG В общем решил развить тему сигнала visibilityChang... 26.12.2008, 23:12
Litkevich Yuriy SABROG, чёто с форматированием, как-то все плохо
... 26.12.2008, 23:19
SABROG Цитата(Litkevich Yuriy @ 26.12.2008, 23:1... 26.12.2008, 23:23
Litkevich Yuriy Цитата(SABROG @ 27.12.2008, 2:23) Просто ... 27.12.2008, 0:51
SABROG Цитата(Litkevich Yuriy @ 27.12.2008, 0:51... 27.12.2008, 13:35
Litkevich Yuriy Цитата(SABROG @ 27.12.2008, 16:35) Стоит ... 27.12.2008, 14:00
Litkevich Yuriy из изменений в 4.5.0:
Цитата- QMainWindow
* ad... 4.3.2009, 5:50![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 24.12.2025, 2:31 |