簡體   English   中英

如何在關閉 Qt 控制台應用程序之前運行我的析構函數?

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

我想在單擊 Qt 控制台應用程序的關閉按鈕之前運行我的析構函數。我在 stackoverflow 上發現了這個, 在 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM