問題タブ [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 投票する
4 に答える
20250 参照

c++ - Qt:スロットの戻り値の意味?

ドキュメントによると、スロットからの戻り値は何の意味もありません。
しかし、生成された moc コードでは、スロットが値を返す場合、この値が何かに使用されていることがわかります。それは何をしますか?


これが私が話していることの例です。これは、moc によって生成されたコードから取得されます。「メッセージ」は何も返さないスロットで、「selectPart」は int を返すように宣言されています。

0 投票する
6 に答える
14881 参照

c++ - シグナルとスロットとは?

誰かが「シグナルとスロット」パターンを簡単に説明できますか?

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

qt - .ui での信号とスロットの接続

Qt 4 で少し遊び始めました。そして、 Qt Designerで問題に遭遇しました。Signal/Slots エディター
では 、そこにリストされている接続のみをセットアップでき、すべてのスロットがリストされているわけではありません。

.ui ファイルに手動で追加しようとすると、接続が機能しません。
ui_*.h ファイルに追加すると正常に動作しますが、デザインを変更すると接続が削除されます。

このバグを回避するための良いヒントはありますか? または、別の言い方
をすると、Qt Designer に使用可能なすべてのスロットを一覧表示するにはどうすればよいですか?

0 投票する
11 に答える
24831 参照

c++ - どのC++シグナル/スロットライブラリを選択する必要がありますか?

QTを使用しないプロジェクトでシグナル/スロットライブラリを使用したい。私にはかなり基本的な要件があります:

  1. 2つの関数を任意の数のパラメーターで接続します。
  2. 信号は複数のスロットに接続できます。
  3. 信号/スロット接続の手動切断。
  4. まともなパフォーマンス-アプリケーションはフレームベース(つまり、イベントベースではない)であり、各フレームの接続を使用したいと思います。

libsigc++とBoost.Signalsの比較を読みました。また、Boost.Signalsのパフォーマンスが低下していることも読みました。ただし、他にもライブラリがあることはわかっており、どのライブラリを選択すればよいかまだわかりません。

シグナル/スロットライブラリに関する推奨事項はありますか?

0 投票する
6 に答える
3869 参照

c++ - GUI を分離する

ユーザーが文字列を入力し、ネットワーク経由で送信できるコマンドラインインターフェイスを備えたプログラムがあります。問題は、GUI の奥深くで生成されるイベントをネットワーク インターフェイスに接続する方法がわからないことです。たとえば、私の GUI クラス階層が次のようになっているとします。

GUI -> MainWindow -> CommandLineInterface -> EntryField

各 GUI オブジェクトは他のいくつかの GUI オブジェクトを保持し、すべてが非公開です。entryField オブジェクトは、メッセージが入力されたことを示すイベント/シグナルを生成します。現時点では、信号をクラス階層に渡しているため、CLI クラスは次のようになります。

そしてc'torで:

passUp 関数は、メイン ループで最終的にこれを実行できるようになるまで、所有するクラス (MainWindow) に接続するためのシグナルを再度発行します。

今、これは本当に悪い解決策のようです。GUI に何かを追加するたびに、クラス階層全体に接続する必要があります。これを回避する方法はいくつかあります。すべてのオブジェクトをパブリックにすることで、メイン ループでこれを実行できます。

しかし、それはカプセル化の考え方に反します。GUI 全体でネットワーク インターフェイスへの参照を渡すこともできますが、GUI コードはできるだけ分離したいと考えています。

ここで本質的な何かが欠けているように感じます。これを行うためのきれいな方法はありますか?

注:私は GTK+/gtkmm/LibSigC++ を使用していますが、Qt でほぼ同じ問題が発生したため、そのようにタグ付けしていません。それは本当に一般的な質問です。

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

qt - 別のスレッドのスロットに信号を接続する方法は?

Qt は通常、単一のスレッドでシグナルとスロットを使用するため、シグナルを呼び出すと、呼び出された同じスレッドシグナルでスロットが呼び出されます。シグナルスロットメカニズムを使用してメッセージをqtスレッドに渡す方法はありますか(したがって、スロットは指定されたスレッドのコンテキストで後で呼び出されます)?

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

c++ - Qtでクロススレッドシグナルを発信するには?

Qt のドキュメントには、シグナルとスロットはdirect、 、queuedおよびであると記載されていますauto

また、スロットを所有するオブジェクトがシグナルを所有するオブジェクトとは異なるスレッドに「住んでいる」場合、そのようなシグナルを発行することはメッセージを投稿するようなものになると述べました-シグナルの発行は即座に戻り、スロットメソッドはターゲットスレッドのイベントループで呼び出されます。

残念ながら、ドキュメントには「lives」が何を意味するかは明記されておらず、例もありません。次のコードを試しました:

main.h:

main.cpp:

出力は次のとおりです。

MySlot()呼び出されることはありません:(。私が間違っていることは何ですか?

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

c++ - Qt4の既存のスロットは認識されません

現在、Qt4とC++を使用してプロジェクトを完了しようとしています。ボタンを使用して状態を切り替えています。ボタンのclicked()シグナルをtextEditに接続して関連する状態を表示しようとすると、エラーが発生しました。

Object::connectそのようなスロットはありませんQTextEdit::append( "move state")Object::connectそのようなスロットはありませんQTextEdit::append( "link state")

ただ、QTextEditには間違いなくappend(QString)スロットがあります。

何か案は?

いくつかのコードサンプル:

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

c++ - シグナルスロット アーキテクチャのベスト プラクティス

libsigc++ を使用してアプリケーションを接続していますが、より簡単な方法については不明です。

データ層を管理する既存のオブジェクト階層があり、最上位のオブジェクトはすべての機能を公開します。これまでのところすべて順調です。

これに GUI オブジェクト階層を追加し、アプリケーション オブジェクト内でこれらをシグナル接続で接続します。接続するには、送信者と受信者の両方へのポインタが必要です。

さて、ツリーのずっと下にある子ウィジェットを直接フックして、ポインターをツリーの上下に渡す必要がありますか?

それとも、チェーンのすべてのステップでシグナルとスロットをフックする骨の折れるプロセスを実行する必要がありますか?

一方では、ポインターを渡すと、sig-slot モデルがもたらす分離が破られます。一方、すべてのステップで接続を作成することは、シグスロットが提供するはずの「イベントテレパシー」と韻を踏むようには見えません。

このモデルを経験した人なら、デフォルトのアプローチを検討するのはどれですか?

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

qt - 初心者の Qt シグナルとスロットに関する質問

Qt の学習を始めたばかりで、GUI の初体験です。これまでのところ、それは単なるコンソール アプリであり、SDL が少しあります。

私はこのシグナルとスロット全体について非常に混乱しています。チュートリアル 11を終了しました。シュートを押すと、シュート ボタンは信号を送信します。この信号は、キャノン フィールドのスロットに接続されており、「シュート」機能を実行します。シュート関数はタイマーを開始し、5 ミリ秒ごとにシグナルを発して、シュートにフレームを進めるように伝えます。私はそれをすべて理解します。

0 から 999 までの for ループを配置して実験しました。これにより、アプリケーションの出力に i が送信され、何が起こったかを確認できました。これが私が混乱し始めるところです。場合によっては、0、1、2、3 などの出力を開始し、数 (10 など) を取得してからショットを発射し、ショットが画面から消えると、残りを最大 999 まで出力します。それ以外の場合は、何も出力しません。 、ショットを発射し、0 から 999 を出力します。それ以外の場合は、すべてを出力してからショットを発射します。プログラムの実行と同時に Qt Creator の出力を見て混乱しているだけですか?