首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QStateMachine没有在释放模式下发出started()信号

QStateMachine没有在释放模式下发出started()信号
EN

Stack Overflow用户
提问于 2021-12-09 09:46:38
回答 1查看 75关注 0票数 1

我正在为设备控制器类使用QStateMachine框架。它在调试模式下工作良好。但是,在发布模式中,没有发出QStateMachine::started()信号。下面是一个解决问题的简单小部件项目(表单为空)。

Qt版本5.14.1

编译器: MSVC 2017,MinGW (两者都是64位,结果是相同的)

Test.pro

代码语言:javascript
复制
QT += core gui widgets 
CONFIG += c++11
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += main.cpp mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui

main.cpp

代码语言:javascript
复制
#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

mainwindow.h

代码语言:javascript
复制
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QStateMachine>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT
public slots:
    void stateMachineStarted();

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QStateMachine *stateMachine;
};
#endif // MAINWINDOW_H

mainwindow.cpp

代码语言:javascript
复制
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDebug>

void MainWindow::stateMachineStarted()
{
    qDebug() << "MainWindow::stateMachineStarted()";
}

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    qDebug() << "MainWindow::MainWindow()";
    ui->setupUi(this);
    stateMachine = new QStateMachine;

    QState *closed = new QState;
    QState *setup = new QState;
    QState *opened = new QState;
    QState *closing = new QState;

    stateMachine->addState(closed);
    stateMachine->addState(setup);
    stateMachine->addState(opened);
    stateMachine->addState(closing);

    Q_ASSERT(connect(stateMachine, &QStateMachine::started, this, &MainWindow::stateMachineStarted));

    stateMachine->setInitialState(closed);
    stateMachine->start();
}

MainWindow::~MainWindow()
{
    qDebug() << "MainWindow::~MainWindow()";
    delete ui;
}

应用程序在调试模式下的输出(几秒钟后我关闭了表单)。

代码语言:javascript
复制
12:39:09: Starting C:\bin\build-Test-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug\debug\Test.exe ...
MainWindow::MainWindow()
MainWindow::stateMachineStarted()
MainWindow::~MainWindow()
12:39:11: C:\bin\build-Test-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug\debug\Test.exe exited with code 0

应用程序在发布模式下的输出(几秒钟后我关闭了表单)。

代码语言:javascript
复制
12:27:51: Starting C:\bin\build-Test-Desktop_Qt_5_14_2_MSVC2017_64bit-Release\release\Test.exe ...
MainWindow::MainWindow()
MainWindow::~MainWindow()
12:27:53: C:\bin\build-Test-Desktop_Qt_5_14_2_MSVC2017_64bit-Release\release\Test.exe exited with code 0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-09 15:17:12

在发布模式下,很可能没有建立连接,因为您将其包装在Q_ASSERT宏中。

有关更多信息,请参见Q_ASSERT release build semantics

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

https://stackoverflow.com/questions/70287726

复制
相关文章

相似问题

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