Используйте QFinalState
класс для этого. На отметке docs показан пример использования QPushButton
с выходом. Вам просто нужно подключить его к сигналу finished()
, например.
UPD
Некоторые примеры использования:
MainWinow.h
class MainWindow : public QMainWindow, private Ui::MainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
private:
QDialog *dialog;
private slots:
void on_pushButton_clicked();
};
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
setupUi(this);
dialog = new QDialog;
}
void MainWindow::on_pushButton_clicked()
{
// Open dialog after push button was clicked
if (!dialog)
dialog = new QDialog;
QEventLoop loop;
QStateMachine machine;
QState *s1 = new QState();
QFinalState *s2 = new QFinalState();
s1->addTransition(dialog, SIGNAL(finished(int)), s2);
connect(&machine, QStateMachine::finished, [&loop]{
qDebug() << "Finished";
loop.quit();
});
machine.addState(s1);
machine.addState(s2);
machine.setInitialState(s1);
machine.start();
dialog->show();
loop.exec();
qDebug() << "Really finished";
}
Так мы создаем QEventLoop
, QStateMachine
и добавить состояния (ини t состояние и конечное состояние). Затем подключите сигнал QDialog::finished()
с переходом в конечное состояние и подключите сигнал QStateMachine::finished()
с слотом, где цикл событий будет остановлен. Затем покажите QDialog
и запустите QStateMachine
.
На консоли напечатает:
Готовые
Realy закончил
ссылка не работает! – EmreS
@EmreS Отредактировано, извините –
это нормально, но у меня есть цикл выше кода, я хочу остановить цикл, когда QDialog закрыт? – EmreS