2012-05-13 9 views
32

Qtは側面の1つが削除されたときにオブジェクト間の接続を自動的に削除しますか?クラスの1つが削除されると、Qtの信号は自動的に切断されます

たとえばconnect (A .. , B ..)の場合、ポインタ(ポインタ)が削除されるか、またはBが削除されると、接続は切断されますか?

デストラクタでdisconnectを明示的に使用する必要がありますか?

答えて

31

はい、QObject::~QObjectデストラクタはそれの世話をする:

オブジェクトへとからのすべての信号が自動的に切断され、そしてオブジェクトに対する保留中のポストされたイベントは、イベントキューから削除されます。
ただし、QObjectサブクラスを直接削除するのではなく、deleteLater()を使用する方が安全です。

しかし世話を行います

は警告:クラッシュを引き起こす可能性があります保留中のイベントが配信されるのを待っている間はQObjectを削除。現在実行中のスレッドとは別のスレッドにQObjectが存在する場合は、QObjectを直接削除しないでください。代わりにdeleteLater()を使用してください。これにより、保留中のイベントがすべてオブジェクトに渡された後にイベントループによってオブジェクトが削除されます。

+0

注意:「警告:保留中のイベントが配信待ちの間にQObjectを削除すると、クラッシュする可能性があります。」この状況が発生する可能性がある場合は、['deleteLater()'](http://qt-project.org/doc/qt-4.8/qobject.html#deleteLater)を使用してください。 –

+2

また、削除されたオブジェクトにlambda(使用している場合)を注意してください:切断されていません...私が知っていると思います;) – mBardos

+0

これはQt5でも同様です。 – RegularlyScheduledProgramming

関連する問題