簡単にアクセスできる必要があるいくつかのクラスの一意のインスタンス化として私が書いているアプリケーション。そのために、シングルトンを使用します。
たとえば、私のコアは次のように定義されています。
class Core : public QObject
{
Q_OBJECT
public:
Core();
~Core();
static Core& getCore()
{
static Core mycore;
return mycore;
}
(...)
};
そしてそれはうまく機能します。ただし、QMainWindow からインターライトする MainWindow クラスでも同じことをしようとしました。他のオブジェクトから geometry() などのメソッドにアクセスするために必要です
ただし、コアはうまく機能しますが、メインウィンドウはプログラムを閉じるときにエラーになります。メインウィンドウのデストラクタが呼び出され、明らかに一度実行されます( 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() のマクロです。