2017-02-21 6 views
0

をWA_DeleteOnClose、私はオブジェクト継承のQWidgetを使用していて、それが閉じているときに知るためには、私がsetAttribute(Qt::WA_DeleteOnClose)を使用しました、そしてただし削除するオブジェクト、セグメンテーションフォールト

connect(myObj,SIGNAL(destroyed(QObject*)),this,SLOT(handleFinish())); 

を接続オブジェクトが削除されるとき、私はmunmap_chunk(): invalid pointerを取得し、ポインタのアドレスを見ると、ポインタではないmyObjのデータメンバーの1つです。

ヒープ上にあることになっているので、私は、動的にこのmyobjを割り当てる - myObj = new myObj(); エラーがこのmyobjデストラクタの終わりに来て、私はこれはデストラクタが(見ての後に呼び出される初めてであることを確認しましたWhen setting the WA_DeleteOnClose attribute on a Qt MainWindow, the program crashes when deleting the ui pointer)。

それに対処するための提案はありますか?

+0

'handleFinish()'スロットが呼び出されますか?あなたはあなたの記憶を傷つけています。私はあなたが[MCVE](https://stackoverflow.com/help/mcve)を提供しない限り、この質問は答えられないと思います。デストラクタから文を一時的に削除したり、オブジェクトが破棄されたときに破棄されるメンバデータを削除したりして、問題を切り分けてください。また、コメントアウトされたときにクラッシュが発生しないようにするステートメント/メンバ変数を観察してください。 – Mike

答えて

1

destroyedシグナルを受信するまでには、オブジェクトはではなく、派生型ではありません。他のタイプではなく、QObjectで提供されているメンバーとメソッドにのみアクセスできます。

ウィジェットが閉じようとしているときに通知を受けたいと思われる場合は、ウィジェットのQEvent::closeを傍受するイベントフィルターをインストールしてください。 this answerおよびa discussion of why a closeEvent cannot be generally handled via a slotも参照してください。

+0

ありがとう、私は必要なもののように見えます。 – JLev

関連する問題