What is likely causing your problem (well, several things, actually) are the facts that you are creating your QProcess instances with the MainWindow instance as parent. This means the QProcess instance will be destroyed when the main window is destroyed. Secondly, QApplication's default setting is to quit when the last top-level window closed. In your case, quitting will ensure that the MainWindow instance is destroyed along with your QProcess. Creating your Resetter instance on the stack is useless, since it will be destroyed as soon as the closeEvent() exits.

You can try starting your process detached, as anda_skoa suggests, or you can set the quit on last window closed flag to false. Or, maybe you can create a second, non-visible top-level widget that can be the parent of your QProcess. You can connect the QProcess::finished() signal to that widget's close() slot. Other possibilities as well - turn the quit flag off, keep the QProcess as a child of MainWindow, but connect the finished() signal to the app's quit() slot.