4

私は、QT と多くのサードパーティ ライブラリに大きく基づいたアプリケーションを使用しています。これらは、いくつかのケースでいくつかの例外をスローすることがあります。

ネイティブ Qt アプリでは、これによりアプリケーションが中止または終了します。多くの場合、メイン データ モデルは、外部データなしで純粋な Qt に保持しているため、そのままです。

そのため、このプロセスでエラーが発生したことをユーザーに伝えることで回復することもできると考えています。ユーザーは今すぐ保存するか、メインモデルの作業を続行することを決定する必要があります。

現在、プログラムはストーリーを語らずに静かに終了します。

4

2 に答える 2

6

すべての例外をキャッチするのが非常に難しい場合があります。1 つの例外が誤ってすり抜けてしまった場合は、次の方法が大いに役立ちます。次の方法で関数を継承しQApplicationてオーバーライドしますnotify()

bool MyApplication::notify( 
QObject * receiver, 
QEvent *  event ) 
{
    try 
    {
        return QApplication::notify(receiver, event);
    }
    catch(...)
    {
        assert( !"Oops. Forgot to catch exception?" );

        // may be handle exception here ...
    }

    return false;
}

次に、関数内の をカスタム クラスに置き換えQApplicationます。main()すべてのeventsslotsはこの関数を通じて発行されるため、すべての例外をキャッチしてアプリケーションを安定させることができます。

于 2012-05-25T15:01:01.223 に答える
5

ここの Qt ドキュメントに記載されているように、Qt は現在、完全に例外に対して安全ではありません。そのページの「例外からの回復」セクションでは、例外がスローされたときに Qt アプリケーションで実行できる唯一のこと、つまりアプリをクリーンアップして終了することについて説明しています。

例外をスローするサードパーティのライブラリを使用していることを考えると、Caleb のコメントに記載されているように、外部ライブラリと Qt コードの間の境界でこれらをキャッチし、そこで処理する必要があります。エラーを Qt アプリケーションに伝播する必要がある場合は、エラー コードを返す (可能な場合) か、イベントを送信する必要があります。

于 2010-04-29T07:54:35.057 に答える