Russian Qt Forum
Мая 25, 2025, 04:33
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Два окна
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Два окна (Прочитано 5532 раз)
Serr500
Гость
Два окна
«
:
Мая 25, 2012, 22:15 »
1) Имеется два окна в приложении. Первое создаётся в функции main, второе - по нажатию кнопки в первом окне. Второе окно родителя не имеет. Требуется, чтобы по нажатию кнопки закрытия в первом окне второе вывело некий диалог с запросом пользователю. Если пользователь нажал "Да", то оба окна надо закрыть и выйти из приложения, если "Нет" - оставить всё как есть и продолжить работу. Может быть, туплю из-за позднего времени, но никак не соображу, как это реализовать. Подскажите, пожалуйста, как сделать.
2) Если у второго окна указывать родителем первое окно, то оно упорно "ползает" поверх первого, т.е первое окно не удаётся разместить поверх второго. Можно ли как-то изменить это поведение и сделать окна равноправными?
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Два окна
«
Ответ #1 :
Мая 25, 2012, 23:59 »
1) переопределить closeEvent и в зависимости от ответа пользователя вызывать event->accept() (да) или event->ignore() (нет)
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Syveren
Гость
Re: Два окна
«
Ответ #2 :
Мая 26, 2012, 10:16 »
Цитировать
2) Если у второго окна указывать родителем первое окно, то оно упорно "ползает" поверх первого, т.е первое окно не удаётся разместить поверх второго. Можно ли как-то изменить это поведение и сделать окна равноправными?
А почему бы не использовать QDialog. Даже имея родителя, отображается отдельно
Записан
Serr500
Гость
Re: Два окна
«
Ответ #3 :
Мая 26, 2012, 10:36 »
1) Утром дело пошло. Наверное, устал вчера. Не допёр до переопределения closeEvent, смотрел на сигналы. Требуемое поведение сделал. Если кому интересна реализация, прикрепил к сообщению простенький проект.
2)
Цитата: Syveren от Мая 26, 2012, 10:16
А почему бы не использовать QDialog. Даже имея родителя, отображается отдельно
Второе окно у меня отображается отдельно, т.е.
не внутри
первого. Оно всегда
поверх
первого, даже если первое активно. На вложенной картинке видно, что MainWindow активно, но окно Dialog тем не менее поверх него. Если у диалога нет родителя, то такого поведения нет, но в этом случае в панели задач появляется вторая кнопка - для диалога.
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Два окна
«
Ответ #4 :
Мая 26, 2012, 11:58 »
можешь попробовать первому окну задать Qt::StayOnTopHint (поверх всех окон).
а почему такое принципиальное желание задать второму окну родителя?
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Serr500
Гость
Re: Два окна
«
Ответ #5 :
Мая 26, 2012, 12:27 »
Цитата: kambala от Мая 26, 2012, 11:58
можешь попробовать первому окну задать Qt::StayOnTopHint (поверх всех окон).
Те же яйца, только в профиль. Оба окошка поверх всех окон, но диалог всё равно поверх главного окна.
Цитата: kambala от Мая 26, 2012, 11:58
а почему такое принципиальное желание задать второму окну родителя?
Да, в общем-то, не особо принципиальное... Немного портят эстетическое впечатление две кнопки в панели задач. И наличие родителя позволяет не беспокоиться об удалении - главная форма автоматически разрушит все свои дочерние объекты. И возник уже теоретический интерес, почему такое странное с моей точки зрения поведение окон и как этого избежать.
Записан
LisandreL
Птица говорун
Offline
Сообщений: 984
Надо улыбаться
Re: Два окна
«
Ответ #6 :
Мая 26, 2012, 14:18 »
Цитата: Serr500 от Мая 26, 2012, 12:27
И возник уже теоретический интерес, почему такое странное с моей точки зрения поведение окон и как этого избежать.
По сути в Qt нет такого понятие как «окно».
Есть только виджет, который может быть компонентом на другом виджете.
То есть хотите QComboBox или QLineEdit использовать как окно? Пожалуйста.
Хотите встроить в своё окно QColorDialog или QPrintPreviewDialog? Не вопрос.
Записан
Serr500
Гость
Re: Два окна
«
Ответ #7 :
Мая 27, 2012, 13:26 »
Цитата: LisandreL от Мая 26, 2012, 14:18
По сути в Qt нет такого понятие как «окно».
И отсутствие понятия "окно" приводит к тому, что
одно окно
один виджет будет всегда поверх другого?
Записан
DmitryM
Гость
Re: Два окна
«
Ответ #8 :
Мая 30, 2012, 10:06 »
Цитата: Serr500 от Мая 27, 2012, 13:26
Цитата: LisandreL от Мая 26, 2012, 14:18
По сути в Qt нет такого понятие как «окно».
И отсутствие понятия "окно" приводит к тому, что
одно окно
один виджет будет всегда поверх другого?
вызови move и передвинь туда, куда надо.
Записан
Serr500
Гость
Re: Два окна
«
Ответ #9 :
Мая 30, 2012, 10:11 »
Почитайте внимательнее начало темы. move совсем не в тему.
Записан
Страниц: [
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...