当在启动事件循环之前同步触发信号QCoreApplication :: quit()时,将忽略该信号并且应用程序将永久挂起.但是,从QTimer触发,应用程序正确退出.在启动exec循环之前启动可以立即返回的任务的正确方法是什么?
以下是重现此行为的最小代码:
hang.h
#ifndef HANG_H
#define HANG_H
#include <QObject>
class hang : public QObject
{
Q_OBJECT
public:
explicit hang(QObject *parent = 0);
signals:
void done();
public slots:
void foo();
};
#endif // HANG_H
Run Code Online (Sandbox Code Playgroud)
hang.cpp
#include "hang.h"
#include <iostream>
hang::hang(QObject *parent) :
QObject(parent)
{
}
void hang::foo()
{
std::cout << "foo emit done()" << std::endl;
emit done();
}
Run Code Online (Sandbox Code Playgroud)
main.cpp中
#include <QCoreApplication>
#include <QTimer>
#include <hang.h>
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
hang obj;
QObject::connect(&obj, SIGNAL(done()), &app, …Run Code Online (Sandbox Code Playgroud)