QDialog открывает другой QDialog

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

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

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


person Pieter    schedule 17.02.2010    source источник


Ответы (2)


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

person Pieter    schedule 18.02.2010

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

person Caleb Huitt - cjhuitt    schedule 17.02.2010
comment
Спасибо, часть о циклах событий действительно была тупиковой. - person Pieter; 18.02.2010