Сигнал срабатывает, хотя диалоговое окно не сфокусировано

#c #qt #qt4

#c #qt #qt4

Вопрос:

У меня есть диалоговое окно с элементами lineEdit. Я хочу, чтобы диалоговое окно закрывалось при нажатии ENTER, поэтому я добавил слот для сигнала returnPressed ():

 ChPasswd::ChPasswd(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::ChPasswd)
{
    ui->setupUi(this);
    connect(ui->NewPasswordInput, SIGNAL(returnPressed()), SLOT(checkPasswords()));
}
  

В какой-то момент я открываю окно сообщения:

 QMessageBox mb(...);
mb.exec();
  

Окно открывается и получает фокус. Проблема в том, что когда я сейчас нажимаю ENTER, в ChPasswd срабатывает сигнал returnPressed и checkPasswords() вызывается. Почему обрабатывается это событие клавиатуры?

Комментарии:

1. Что является родительским окном сообщения?

2. Я сделал. Ничего не изменилось. Я также безуспешно пытался установить mb.setWindowModality(Qt::ApplicationModal)

3. Хорошо, я только что понял это. Поскольку это диалоговое окно, нажатие ENTER автоматически вызывает другой слот. Этот слот также вызывает checkPasswords() и для этого создано второе окно сообщения, которое появляется, как только первое было закрыто.

4. @slosd: Если вы решили свою проблему, вам следует отправить ее в качестве самостоятельного ответа, чтобы вопрос не остался без ответа 🙂

Ответ №1:

Хорошо, я только что понял это. Поскольку это диалоговое окно, нажатие ENTER автоматически вызывает другой слот. Этот слот также вызывает checkPasswords() и для этого создано второе окно сообщения, которое появляется, как только первое было закрыто.