Russian Qt Forum
Ноябрь 25, 2024, 00:33
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Возврат фокуса после QMessageBox::warning()
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Возврат фокуса после QMessageBox::warning() (Прочитано 4770 раз)
Zmeishe
Гость
Возврат фокуса после QMessageBox::warning()
«
:
Декабрь 15, 2011, 09:06 »
От чего зависит возврат фокуса?
Есть MainWindow. На нём QTabWidget.
В QTabWidget`е несколько вкладок(страниц).
На страницах QTableView`хи
Фокус имеет одна из QTableView. Пользователь чего-то там вводит, программа на лету проверяет и выводит сообщение через QMessageBox::warning().
После этого фокус возвращается на tabWidget, но никак не на tableView.
Пробовал разные варианты. Задавал в качестве родителя:
QMessageBox::warning(this, ...);
QMessageBox::warning(tabWidget, ...);
QMessageBox::warning(tableView, ...);
Фокус всё-равно не возвращается на tableView.
Только если явно указать tableView->setFocus(); сразу после любого варианта с QMessageBox::warning(...);
Автоматически он возвращается туда, где был только на Windows, на Mandriva Linux 2007 KDE 3.5 или Mandriva Linux 2010 KDE 4.
На KUbuntu GNOME/KDE без разницы - только после явного tableView->setFocus();
Уже складывается впечатление, что такое поведение зависит от версии Qt.
На Mandriva Linux 2007 Qt 4.5.1
На Mandriva Linux 2010 Qt 4.5.3
На KUbuntu 10.04 Qt 4.6.2
Что-то не очень хочется объяснять каждому разработчику, что он должен не забыть вызвать setFocus() явным образом после каждого QMessageBox.
Всё-равно, кто-нибудь забудет.
Записан
Bepec
Гость
Re: Возврат фокуса после QMessageBox::warning()
«
Ответ #1 :
Декабрь 15, 2011, 09:18 »
мб это особенность ОС?
Записан
Zmeishe
Гость
Re: Возврат фокуса после QMessageBox::warning()
«
Ответ #2 :
Декабрь 15, 2011, 09:23 »
Я тоже так думал.
Но для Linux это может быть особенностью оконного менеджера, а не ОС.
А вот оконный менеджер и для Mandriva 2010 и для KUbuntu 10.04 одинаковый - KDE 4, а поведение разное.
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Возврат фокуса после QMessageBox::warning()
«
Ответ #3 :
Декабрь 15, 2011, 09:23 »
Цитата: Bepec от Декабрь 15, 2011, 09:18
мб это особенность ОС?
Тогда скорее особенность WM или его настроек.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
Re: Возврат фокуса после QMessageBox::warning()
«
Ответ #4 :
Декабрь 15, 2011, 09:30 »
Полагаюсь на ваши слова, ибо в unix подобных не программировал
Записан
Zmeishe
Гость
Re: Возврат фокуса после QMessageBox::warning()
«
Ответ #5 :
Декабрь 15, 2011, 09:45 »
С другой стороны, если дело в оконном менеджере.
Оконный менеджер передал фокус тому окну, которое его имело.
И менеджеру должно быть глубоко фиолетово, какому виджету внутри себя это окно передаст фокус.
С точки зрения Qt, фокус должен быть передан родителю.
В одной системе, если родителем для QMessageBox является вьюха - фокус ей не возвращается.
А в другой системе родителем может быть даже главное окно и фокус возвращается вьюхе как надо.
Короче, я запутался.
Записан
Bepec
Гость
Re: Возврат фокуса после QMessageBox::warning()
«
Ответ #6 :
Декабрь 15, 2011, 09:59 »
Тут вопрос Handle, если я правильно помню. Фокус может возвращаться точно элементу окна, или же просто окну. (это уже как реализовали создатели менеджеров).
Записан
Zmeishe
Гость
Re: Возврат фокуса после QMessageBox::warning()
«
Ответ #7 :
Декабрь 16, 2011, 13:20 »
Посмотрел, что Qt выводит в консоль в момент показа QMessageBox
На Mandriva ничего криминального.
А на Kubuntu выводит сообщение про evet filter и different thread.
Потом приложение может рухнуть, а может и не рухнуть.
Похоже тут и зарыта собака с передачей фокуса.
При чём тут different thread в одно-поточном приложении?
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...