QDialog открывает еще один QDialog
-
21-09-2019 - |
Вопрос
У меня есть подкласс QDialog, содержащий несколько подклассов QSpinBox.При нажатии на счетчик — клавиатуру (еще один QDialog), на которой вы можете использовать кнопки для ввода цифр.Оба QDialog активируются вызовом QDialog::exec();
Однако при открытии второго QDialog первый закрывается.Я прошел через это и заметил, что первый QDialog еще не заканчивается.QDialog 1 отправляет сообщение «QDialog::Rejected» ПОСЛЕ того, как я завершаю QDialog 2.Я бы хотел, чтобы QDialog 1 вообще не заканчивался, ему необходимо обновить счетчик с введенным значением и открыть больше QDialog для других счетчиков, которые пользователь хочет отредактировать позже.
Я думаю, это связано с тем, что цикл событий QDialog 1 уничтожается циклом событий QDialog 2.Я пробовал использовать QDialog::show на QDialog 2.Виджет появляется на мгновение (миллисекунду), но не остается активным.QDialog 1 также немедленно закрывается.
Решение
Для QDialog 1 установлено значение Qt::Popup, для QDialog 2 по умолчанию установлено значение Qt::Dialog.Всплывающее окно закрывается при различных событиях.Я также установил флаг QDialog 2 на Qt::Popup, который, похоже, больше не закрывает QDialog 1.
Другие советы
Судя по тому, как вы устно описали код, вы не должны видеть описываемую проблему.Не видя вашего фактического кода, я не мог рискнуть предположить, что вызывает проблему.Однако я могу с уверенностью сказать, что я бежал exec()
в диалоговом окне A, затем внутри этого запуска exec()
в диалоге B (с помощью кнопки), и диалог A оставался доступным при выходе из диалога B.