2010-02-17 3 views
2

У меня есть подкласса QDialog, содержащая кучу подкласса QSpinBox. Когда вы нажимаете кнопку со спинкой, клавиатуру (другую QDialog), где вы можете использовать кнопки для ввода цифр. Оба QDialog активируются вызовом QDialog :: exec();QDialog popping another QDialog

Однако при открытии этого второго QDialog первый закрывается. Я прошел через него и заметил, что 1-й QDialog еще не закончился. QDialog 1 отправляет «QDialog :: Rejected» ПОСЛЕ завершения QDialog 2. Я бы хотел, чтобы QDialog 1 не заканчивался вообще, ему нужно обновить spinbox с введенным значением и открыть больше QDialog для другого проигрывателя. пользователь хочет изменить позже.

Я думаю, что это связано с тем, что EventQuog QDialog 1 был убит eventloop QDialog 2. Я пробовал использовать QDialog :: show в QDialog 2. Виджет появляется на мгновение (миллисекунда), но не остается активным. QDialog 1 сразу же закрывается.

ответ

3

QDialog 1 установлен в Qt :: Popup, QDialog 2 по умолчанию установлен в Qt :: Dialog. Всплывающее окно закрывается на широкий диапазон событий. Я установил флаг QDialog 2 в Qt :: Popup, который, похоже, больше не закрывает QDialog 1.

2

Как вы устно описали код, вы не должны видеть проблему, которую вы описываете. Не видя своего реального кода, я не мог бы догадываться о том, что вызывает проблему. Тем не менее, я могу с уверенностью сказать, что я запустил exec() в диалоговом окне A, затем внутри этого запуска exec() в диалоговом окне B (с помощью кнопки) и имел диалог A оставаться доступным, когда диалог B завершается.

+0

Спасибо, часть о eventloops действительно была тупиком. – Pieter

Смежные вопросы