Russian Qt Forum
Мая 25, 2025, 04:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Два окна  (Прочитано 5532 раз)
Serr500
Гость
« : Мая 25, 2012, 22:15 »

1) Имеется два окна в приложении. Первое создаётся в функции main, второе - по нажатию кнопки в первом окне. Второе окно родителя не имеет. Требуется, чтобы по нажатию кнопки закрытия в первом окне второе вывело некий диалог с запросом пользователю. Если пользователь нажал "Да", то оба окна надо закрыть и выйти из приложения, если "Нет" - оставить всё как есть и продолжить работу. Может быть, туплю из-за позднего времени, но никак не соображу, как это реализовать. Подскажите, пожалуйста, как сделать.


2) Если у второго окна указывать родителем первое окно, то оно упорно "ползает" поверх первого, т.е первое окно не удаётся разместить поверх второго. Можно ли как-то изменить это поведение и сделать окна равноправными?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #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
Гость
« Ответ #2 : Мая 26, 2012, 10:16 »

Цитировать
2) Если у второго окна указывать родителем первое окно, то оно упорно "ползает" поверх первого, т.е первое окно не удаётся разместить поверх второго. Можно ли как-то изменить это поведение и сделать окна равноправными?
А почему бы не использовать QDialog. Даже имея родителя, отображается отдельно
Записан
Serr500
Гость
« Ответ #3 : Мая 26, 2012, 10:36 »

1) Утром дело пошло. Наверное, устал вчера. Не допёр до переопределения closeEvent, смотрел на сигналы. Требуемое поведение сделал. Если кому интересна реализация, прикрепил к сообщению простенький проект.

2)
А почему бы не использовать QDialog. Даже имея родителя, отображается отдельно
Второе окно у меня отображается отдельно, т.е. не внутри первого. Оно всегда поверх первого, даже если первое активно. На вложенной картинке видно, что MainWindow активно, но окно Dialog тем не менее поверх него. Если у диалога нет родителя, то такого поведения нет, но в этом случае в панели задач появляется вторая кнопка - для диалога.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #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
Гость
« Ответ #5 : Мая 26, 2012, 12:27 »

можешь попробовать первому окну задать Qt::StayOnTopHint (поверх всех окон).
Те же яйца, только в профиль. Оба окошка поверх всех окон, но диалог всё равно поверх главного окна.

а почему такое принципиальное желание задать второму окну родителя?
Да, в общем-то, не особо принципиальное... Немного портят эстетическое впечатление две кнопки в панели задач. И наличие родителя позволяет не беспокоиться об удалении - главная форма автоматически разрушит все свои дочерние объекты. И возник уже теоретический интерес, почему такое странное с моей точки зрения поведение окон и как этого избежать.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #6 : Мая 26, 2012, 14:18 »

И возник уже теоретический интерес, почему такое странное с моей точки зрения поведение окон и как этого избежать.
По сути в Qt нет такого понятие как «окно».
Есть только виджет, который может быть компонентом на другом виджете.

То есть хотите QComboBox или QLineEdit использовать как окно? Пожалуйста.
Хотите встроить в своё окно QColorDialog или QPrintPreviewDialog? Не вопрос.
Записан
Serr500
Гость
« Ответ #7 : Мая 27, 2012, 13:26 »

По сути в Qt нет такого понятие как «окно».
И отсутствие понятия "окно" приводит к тому, что одно окно один виджет будет всегда поверх другого?
Записан
DmitryM
Гость
« Ответ #8 : Мая 30, 2012, 10:06 »

По сути в Qt нет такого понятие как «окно».
И отсутствие понятия "окно" приводит к тому, что одно окно один виджет будет всегда поверх другого?
вызови move и передвинь туда, куда надо.
Записан
Serr500
Гость
« Ответ #9 : Мая 30, 2012, 10:11 »

Почитайте внимательнее начало темы. move совсем не в тему.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 2.099 секунд. Запросов: 23.