Задержка в функции MainWindow
Есть функция
void MainWindow::closeEvent (QCloseEvent *event)
{
Break = 1;
//задержка на 500мс ->после неё виполнить QApplication::quit();
QApplication::quit();
event->accept();
}
Нужно при задержке чтоб в потоке с main.cpp не было задержки. Иными словами main.cpp должен знать что Break=1 и при этом должна быть задержка в функции,которая в mainwindow.
Ответы (1 шт):
Автор решения: Alexander Chernin
→ Ссылка
При помощи сигналов и таймера:
class MainWindow : public QMainWindow {
Q_OBJECT
signals:
void doBreak(int value);
void doExit();
protected:
void closeEvent(QCloseEvent* event) {
emit doBreak(1);
// Через 500 секунд просигнализировать, что пора на выход
QTimer::singleShot(500, this, &MainWindow::doExit);
// или
// QTimer::singleShot(500, this, SIGNAL(doExit()));
// Обязательно вызов ignore, иначе окно закроется сразу
event->ignore();
}
}
int main(...) {
QApplication app(...);
MainWindow window;
QObject::connect(&window, &MainWindow::doBreak, <получатель сигнала>)
QObject::connect(&window, &MainWindow::doExit, &app, &QApplication::quit);
return app.exec();
}