さらに、QMetaObject::invokeMethod
は、メソッド/スロットを非同期に呼び出すタイプセーフな方法です(GUIスレッドでその実行をキューに入れます)?QMetaObject :: invokeMethodの代わりにコンパイル時のチェック
QMetaObject::invokeMethod
には、コンパイル時に関数名のチェックがありません。また、呼び出しごとに検索と文字列の照合が行われるため、メンバ関数を文字列で指定する際のオーバーヘッドもあります。
新しいQObject::connect
の構文に類似したものがあり、コンパイル時のチェックを提供するメソッドを呼び出すのだろうかと思います。
1つの解決策は信号スロットアーキテクチャを使用していますが、これはQObjectクラスの各呼び出し元コードをラッピングしてその信号を放出できるようにします。 QEventLoop
を持っている必要がありますQTimer::singleShot
が呼び出されたスレッド:
基本的にはhttps://bugreports.qt.io/browse/QTBUG-36861です。 – peppe
@peppe:代替手段がないようです:https://bugreports.qt.io/browse/QTBUG-55304 – Isaac
[this](https://stackoverflow.com/a/21653558/2666212)を見てください。したがって、 'QMetaObject :: invokeMethod(object、" method ")'の代わりに、次のようなことができます: '{QObject src; QObject :: connect(&src、&QObject :: destroyed、object、&Object :: method);} 'そのようなコンテキスト' QObject'を持つlamba関数を使うことさえできます。 。 。 – Mike