我正在编写的应用程序是一些必须易于访问的类的唯一实例化。为此,我使用单例。
例如,我的核心定义为:
class Core : public QObject
{
Q_OBJECT
public:
Core();
~Core();
static Core& getCore()
{
static Core mycore;
return mycore;
}
(...)
};
而且效果很好。但是,我尝试对我的 MainWindow 类执行相同的操作,该类从 QMainWindow 中断。我需要它才能从其他对象访问诸如geometry()之类的方法
然而 Core 工作得很好,在关闭程序时 MainWindow 会出错。主窗口析构函数被调用并执行一次(使用 qDebug() 进行调试),但我仍然有一个 SIGSEGV 信号。发生了什么?如何解决?
这是MainWindow的代码
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
static MainWindow& getUi()
{
static MainWindow myUi;
return myUi;
}
public slots:
void refreshImage();
private:
Ui::MainWindow *ui;
};
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(&appCore(), SIGNAL(refreshed()), this, SLOT(refreshImage()));
}
MainWindow::~MainWindow()
{
delete ui;
}
和主要代码
QApplication app(argc, argv);
try
{
appCore().setDevice(MDMA::Kinect);
appUi().show();
return app.exec();
} catch(MDMA::exn e) {
(...)
}
其中 appCore 和 appUi 是 Core::getCore 和 MainWindow::getUi() 的宏