программы, и выйти из функции только при нажатии на кнопку. Далее мой код, при нажатии на кнопку программа падает. Подскажите, пожалуйста, как исправить ситуацию?
void foo()
{
QEventLoop eventLoop;
QWidget wgt;
QVBoxLayout lyt_vMain;
QPushButton btn_accept;
wgt.setLayout(&lyt_vMain);
lyt_vMain.addWidget(&btn_accept);
btn_accept.setText("Принять");
QObject::connect(&btn_accept, &QPushButton::clicked, [&](){ /* ... */ eventLoop.quit(); });
wgt.show();
eventLoop.exec();
}
Для этого есть удобный QDialog вместе с exec(). Или даже QMessageBox + exec
Падает, потому что ты выходишь из eventLoop, функция завершается и твое окно, которое еще активно, уничтожается
Что вы хотите
Хочу чтобы при вызове функции создавалось диалоговое окно и программа не выходила из функции до тех пор, пока не была нажата кнопка, при этом, чтобы сигналы и слоты продолжали отрабатывать "на заднем фоне"
Почитайте документацию на QDialog там есть примеры блокирующего подхода.
Хотя при такой постановке вопроса вам все-таки нужен не блокирующий)
Просто используйте QDialog и все
И что с ним? exec() accept ?
Там есть acept reject
Программа падает
auto question = new QMessageBox(QMessageBox::Question, "Вопрос?", "текст", QMessageBox::Yes | QMessageBox::No, this); question->setWindowModality(Qt::WindowModal); //модальное окно question->setAttribute(Qt::WA_DeleteOnClose); //удалять окно при закрытии connect(question, &QMessageBox::accepted, this, [this](){ /*что то натворить*/ }); question->show(); небольшая выдержка
Есть стандарный окно если это просто yes no блокирует главное окно. QDialog::information Or QDialog::critical..
Обсуждают сегодня