Задержка в функции 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();
}
→ Ссылка