如何在关闭Qt控制台应用程序之前运行我的析构函数?

How to run my destructor before close the Qt Console Application?

本文关键字:运行 我的 析构函数 应用程序 控制台 Qt      更新时间:2023-10-16

我想在单击Qt控制台应用程序的关闭按钮之前运行我的析构函数。我在堆栈溢出上发现了这个,在Qt控制台场景中没有调用析构函数。

我试图获取返回值,并在之后返回值,但这无济于事。


class MyClass
{
    Q_OBJECT
public:
    MyClass()
    {
        qDebug() << "MyClass()";
    }
    ~MyClass()
    {
        qDebug() << "~MyClass()";
    }
};
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    MyClass my;
    int ret = a.exec();
    qDebug() << "this line will not run.";
    return ret;
}
  1. 我想知道为什么它不运行我的析构函数。

  2. 如果我想运行它。如何运行?

我希望它在单击关闭按钮时输出MyClass()this line will not run.~MyClass()

你可能想做这样的事情。我不确定它是否适用于Windows,因为我现在没有它,但它适用于Linux。

#include <signal.h>
#include <QCoreApplication>
#include <QObject>
class MyClass : public QObject
{
    Q_OBJECT
public:
    MyClass()
    {
        qDebug() << "MyClass()";
    }
    ~MyClass()
    {
        qDebug() << "~MyClass()";
    }
};
void SigInt_Handler(int)
{
    qDebug() << "Interrupt received";
    qApp->quit();
}
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    MyClass my;
    signal(SIGINT, &SigInt_Handler);
    int ret = a.exec();
    return ret;
}

此外,如果您在其中使用 Q_OBJECT 宏,您的MyClass应该扩展QObject

Ctrl+C时,将打印以下内容:

Interrupt received
~MyClass()