問題タブ [signals-slots]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
4554 参照

qt - QtでQProcess::started()を通知するためにスロットを接続する方法は?

編集:解決しました。

こんにちは、私は Qt から始めています。スロットをシグナルに接続しようとしましQProcess::started()たが、できません。QObject::connect()戻りますfalse

私は何が間違っているのですか?

コードの一部を次に示します。

試してみたので、プロセスが正常に開始されたことがわかりprocess->WaitForStarted()ますtrue。しかし、スロットにブレークポイントを設定しましたが、foo::process_started()ヒットすることはありません。ここで何が問題なのですか?ありがとう!

0 投票する
2 に答える
6306 参照

c++ - Qtが派生スロットではなく基本クラスで自分のスロットを探すのはなぜですか?

XQtのクラスを継承するクラスがありBaseます。void mySlot()クラスでスロットを宣言して定義しX、Xのコンストラクターでこのスロットにシグナルを接続しています。void mySlot()ただし、プログラムを実行すると、クラスにそのようなスロットがないというエラーメッセージが表示されBaseます。

メタオブジェクトコンパイラ(moc)によって生成されたコードが、(派生)クラスではなく基本クラスでスロットを検索するのはなぜですか?

0 投票する
4 に答える
2873 参照

c++ - Qtアプリでスロットが認識されていないようです

私は最近C++とQt4の学習に取り組んでいますが、つまずきにぶつかりました。

私は次のクラスと実装を持っています:

ただし、ビルドして実行しようとすると、正常にビルドされますが、すぐにメッセージが表示されて終了します。

私が何か間違ったことをしない限り、Qtはスロットを認識していないようですrun()

誰か助けてもらえますか?


アップデート:

コードは次のとおりです。

プログラムはまだ「予期せず終了」しましたが、そのようなものはもうないことを教えてくれませんQWidget::run()

0 投票する
2 に答える
5120 参照

qt - 信号とスロットは内部でどのように実装されていますか?

この質問はこのフォーラムですでに行われていますが、私はその概念を理解していません。

私が読んでいたところ、シグナルとスロットは関数ポインターを使用して実装されているようです。つまり、シグナルは、接続されているすべてのスロット(関数ポインター)を呼び出す1つの大きな関数です。これは正しいです?そして、ストーリー全体で生成されたmocファイルの役割は何ですか?信号関数がどのスロットを呼び出すか、つまりどのスロットがこの信号に接続されているかをどのように認識しているかわかりません。

御時間ありがとうございます

0 投票する
1 に答える
1401 参照

c++ - Boostはどのように信号とスロットを実装しますか?

別の質問を続けるために、これを聞いてみましょう:

Boostはどのように信号/スロットメカニズムを実装しますか?

参照: 信号とスロットは内部でどのように実装されていますか? http://www.boost.org/doc/libs/1_40_0/doc/html/signals.html

0 投票する
3 に答える
16829 参照

c++ - Qt シグナルとスロット、スレッド、app.exec()、および関連クエリ

この質問に関連】

qt シグナルとスロットがどのように機能するかを理解するために、このコードを書きました。行動を説明し、自分の結論が正しいかどうかを教えてくれる人が必要です。

私のプログラム:

connectionhandler.h

connectionhandler.cpp

main.cpp

このプログラムを実行すると、新しい接続を探す無限ループに陥ります。

Observation:を呼び出さないとapp.exec()、プログラムはすぐに戻ります (そうあるべきです)。
Question:なぜ?

Question:スロットをキュー接続として接続した場合、スロット呼び出しはいつ実行されますか?
Question:ある種の無限ループの場合app.exec()、信号はどのようnewConnection()に放出されるのでしょうか?

Big Question:彼らの「2番目のスレッド」はここに関係していますか? (いいえ、そして驚くほどエレガントな説明を期待しています:))

ありがとう、
ジュニア

PS: このネストされた括弧症候群を持っている人は他にいますか? 「(.. :))」または「(.. (..))」のように?

0 投票する
7 に答える
3827 参照

c++ - Qt GUIアプリ:QObject :: connect()が失敗した場合の警告?

最近、QtプロジェクトをLinuxからVistaに移行しましたが、今は盲目的にシグナルをデバッグしています。

Linuxでは、デバッグビルドでQObject :: connect()が失敗すると、stderrに警告メッセージが表示されます。Windowsでは、GUIアプリケーションのコンソール出力はなく、OutputDebugString呼び出しのみがあります。

すでにDebugViewをインストールしましたが、それは自分のqDebug()出力をうまくキャッチしますが、失敗したシグナルに対する警告はありません。

考えられる解決策の1つは、シグナルにQtCreatorのオートコンプリートを使用することですが、私はEclipseが好きで、両方を使用するのはPITAです。実行時に信号/スロット情報を取得する方法に関するアイデアはありますか?

編集:connect()がboolを返すことに気づきました。これにより、当面の問題が醜く解決されます。ただし、これはQMetaObject :: connectSlotsByName()が失敗する場合を解決せず、これはウィジェットで自動的に実行されます。

0 投票する
3 に答える
1664 参照

c++ - パラメータ値に基づくQtマップシグナル

QSignalMapper接続に基づいてさまざまなパラメーターでスロットを呼び出すために使用できることを知っています。私が達成したいことは少し異なります。

アプリケーションでプラグインを使用しており、さまざまなプラグインがさまざまなタイプのオブジェクトを担当しています。それぞれが異なるプラグインで実装されている複数のスロットを、メイン アプリケーションによって発行された 1 つのシグナルに接続しています。シグナルのパラメーターの 1 つは、シグナルにQString関連付けられたオブジェクトのタイプを示す です。現在、スロットでこのパラメーターをチェックしており、タイプがプラグインによって処理されるかどうかを続行します。これには欠点があります。すべてのプラグインがこのチェックを行うため、可能であればこれを避けたいと考えています。

すべてのスロットを同じシグナルに接続したいのですが、シグナルが送信されると、QString引数の値に応じて適切なスロットのみが呼び出されQSignalMapperます。

これを行う組み込みのメカニズムはありますか?そうでない場合、これを達成する方法についてのアイデアはありますか?

前もって感謝します。

0 投票する
2 に答える
1986 参照

qt - QWidget を QObject の子として持つことは可能ですか?

私の主なアプリケーション オブジェクトは、、、 、およびその他のいくつかのコンポーネントQObjectをジャグリングするです。アプリはほとんどがトレイにあり、いくつかのオプション ダイアログなどがあります。QSystemTrayIconQDialogQWindow

QMetaObject::connectSlotsByName()ここで、これらのオブジェクトからの信号をメイン オブジェクトのスロットに接続するために使用したいと思います。それは 10 ~ 15 個なので、手で書くのは効率的、適切、専門的、現代的などとは思えません。

ただし、メイン オブジェクトが表示されないため、 myQObjectをベース オブジェクトの親として使用するQWidgetことも、オブジェクトを inherit に変更することもできません。QWidget

アイデア?

0 投票する
2 に答える
4404 参照

c++ - Boost ライブラリのシグナルとスロットとマルチスレッド

私は Stackoverflow で同様の質問をしましたが、まだ良い答えが得られません:

  1. ブーストがシグナルとスロットを実装する方法
  2. シグナルとスロットの実装方法

この信号/スロットがどのように達成されるかについて、私はかなり困惑しています。

Q1: 以下のコードから、sig が 2 つの関数 (Hello() と World()) に接続されており、関数がシリアル化された方法で呼び出されているように見えます。これは、1 つの関数 (Hello()) が別の関数(World())に入る前に完了しますか? =>シングルスレッドプログラム

Q2: マルチスレッドのシグナル/スロットを有効にする方法はありますか? (=> World() はすぐに開始されます。Hello() が完了するのを待つ必要はありません。) または、推奨されない場合は、その理由を教えてください。 ?

Boost Web サイトのサンプル コード:

出力: ハロー、ワールド!