gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:31:23 26 4
gpt4 key购买 nike

我想在单击 Qt 控制台应用程序的关闭按钮之前运行我的析构函数。我在 stackoverflow 上找到了这个,Destructor not called in Qt console scenario .

我试过获取返回值,并返回之后的值。但没有任何帮助。


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() 并且 这一行不会运行。~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()

关于c++ - 如何在关闭 Qt 控制台应用程序之前运行我的析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57395491/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com