1

簡単にアクセスできる必要があるいくつかのクラスの一意のインスタンス化として私が書いているアプリケーション。そのために、シングルトンを使用します。

たとえば、私のコアは次のように定義されています。

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() のマクロです。

4

2 に答える 2

2

このクラッシュは、QApplicationおそらくMainWindow.

MainWindow必要な場所に別の方法で via を渡すことができない場合(たとえば、引数として、または via として)、そのメソッド (非所有のグローバル参照)で行うのとQObjecg::parent()同様の手法を使用できます。QApplicationinstance

の後MainWindow、スタック上の通常のローカル変数としてyour を構築します。次に、最初に を初期化するグローバル ポインタ (できれば; の静的メンバ)をのコンストラクタに設定します。一意性を強制するために、ここで既に初期化されているかどうかを確認することもできます。グローバル ポインターのパブリック アクセサー メソッド ( ?) を介して、どこからでもクラスにアクセスできます。QApplicationQPointerMainWindow0thisMainWindowinstanceQApplication

于 2013-03-03T18:12:14.740 に答える
1

シングルトーンを作成したい場合は、たとえばここで説明されているように、一般的なテクニックを使用してみてください: http://www.qtcentre.org/wiki/index.php?title=Singleton_pattern

その記事をすべて読んだ後、多くの疑問が解消されることを願っています。

私にとっては、シングルトーンの素晴らしくシンプルな実現があります。

幸運を!

于 2013-03-03T19:09:40.107 に答える