首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当QStateMachine关闭时,我如何终止QDialog?

当QStateMachine关闭时,我如何终止QDialog?
EN

Stack Overflow用户
提问于 2015-07-14 06:18:05
回答 1查看 766关注 0票数 2

我有QDialog和QStateMachine。当所有应用程序关闭时,此循环终止,但当Q对话框关闭时,我希望终止循环。我怎么能这么做?

代码语言:javascript
复制
  QStateMachine sm;
  QState s1(&sm), s2(&sm);
  sm.setInitialState(&s1);
  QEventTransition transition(dialog, QEvent::Close);
  s2.addTransition(&transition);
  QEventLoop loop;
  QObject::connect(&s2, &QState::entered, &loop, &QEventLoop::quit);
  sm.start();
  dialog->show();
  loop.exec();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-14 08:15:31

为此使用QFinalState类。在文档示例中,显示了QPushButton和exit的用法。例如,您只需将其与finished()信号连接即可。

UPD

一些用法示例:

MainWinow.h

代码语言:javascript
复制
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

代码语言:javascript
复制
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";
}

因此,我们创建QEventLoopQStateMachine和add状态(init状态和最终状态)。然后将QDialog::finished()信号连接到最终状态,并将QStateMachine::finished()信号与中断事件循环的时隙连接起来。然后显示QDialog并启动QStateMachine

控制台将打印:

完成 真已完成

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31399044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档