問題タブ [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.
qt - QtでQProcess::started()を通知するためにスロットを接続する方法は?
編集:解決しました。
こんにちは、私は Qt から始めています。スロットをシグナルに接続しようとしましQProcess::started()
たが、できません。QObject::connect()
戻りますfalse
。
私は何が間違っているのですか?
コードの一部を次に示します。
試してみたので、プロセスが正常に開始されたことがわかりprocess->WaitForStarted()
ますtrue
。しかし、スロットにブレークポイントを設定しましたが、foo::process_started()
ヒットすることはありません。ここで何が問題なのですか?ありがとう!
c++ - Qtが派生スロットではなく基本クラスで自分のスロットを探すのはなぜですか?
X
Qtのクラスを継承するクラスがありBase
ます。void mySlot()
クラスでスロットを宣言して定義しX
、Xのコンストラクターでこのスロットにシグナルを接続しています。void mySlot()
ただし、プログラムを実行すると、クラスにそのようなスロットがないというエラーメッセージが表示されBase
ます。
メタオブジェクトコンパイラ(moc)によって生成されたコードが、(派生)クラスではなく基本クラスでスロットを検索するのはなぜですか?
c++ - Qtアプリでスロットが認識されていないようです
私は最近C++とQt4の学習に取り組んでいますが、つまずきにぶつかりました。
私は次のクラスと実装を持っています:
と
ただし、ビルドして実行しようとすると、正常にビルドされますが、すぐにメッセージが表示されて終了します。
私が何か間違ったことをしない限り、Qtはスロットを認識していないようですrun()
誰か助けてもらえますか?
アップデート:
コードは次のとおりです。
と
プログラムはまだ「予期せず終了」しましたが、そのようなものはもうないことを教えてくれませんQWidget::run()
qt - 信号とスロットは内部でどのように実装されていますか?
この質問はこのフォーラムですでに行われていますが、私はその概念を理解していません。
私が読んでいたところ、シグナルとスロットは関数ポインターを使用して実装されているようです。つまり、シグナルは、接続されているすべてのスロット(関数ポインター)を呼び出す1つの大きな関数です。これは正しいです?そして、ストーリー全体で生成されたmocファイルの役割は何ですか?信号関数がどのスロットを呼び出すか、つまりどのスロットがこの信号に接続されているかをどのように認識しているかわかりません。
御時間ありがとうございます
c++ - Boostはどのように信号とスロットを実装しますか?
別の質問を続けるために、これを聞いてみましょう:
Boostはどのように信号/スロットメカニズムを実装しますか?
参照: 信号とスロットは内部でどのように実装されていますか? http://www.boost.org/doc/libs/1_40_0/doc/html/signals.html
c++ - Qt シグナルとスロット、スレッド、app.exec()、および関連クエリ
【この質問に関連】
qt シグナルとスロットがどのように機能するかを理解するために、このコードを書きました。行動を説明し、自分の結論が正しいかどうかを教えてくれる人が必要です。
私のプログラム:
connectionhandler.h
connectionhandler.cpp
main.cpp
このプログラムを実行すると、新しい接続を探す無限ループに陥ります。
Observation:
を呼び出さないとapp.exec()
、プログラムはすぐに戻ります (そうあるべきです)。
Question:
なぜ?
Question:
スロットをキュー接続として接続した場合、スロット呼び出しはいつ実行されますか?
Question:
ある種の無限ループの場合app.exec()
、信号はどのようnewConnection()
に放出されるのでしょうか?
Big Question:
彼らの「2番目のスレッド」はここに関係していますか? (いいえ、そして驚くほどエレガントな説明を期待しています:))
ありがとう、
ジュニア
PS: このネストされた括弧症候群を持っている人は他にいますか? 「(.. :))」または「(.. (..))」のように?
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()が失敗する場合を解決せず、これはウィジェットで自動的に実行されます。
c++ - パラメータ値に基づくQtマップシグナル
QSignalMapper
接続に基づいてさまざまなパラメーターでスロットを呼び出すために使用できることを知っています。私が達成したいことは少し異なります。
アプリケーションでプラグインを使用しており、さまざまなプラグインがさまざまなタイプのオブジェクトを担当しています。それぞれが異なるプラグインで実装されている複数のスロットを、メイン アプリケーションによって発行された 1 つのシグナルに接続しています。シグナルのパラメーターの 1 つは、シグナルにQString
関連付けられたオブジェクトのタイプを示す です。現在、スロットでこのパラメーターをチェックしており、タイプがプラグインによって処理されるかどうかを続行します。これには欠点があります。すべてのプラグインがこのチェックを行うため、可能であればこれを避けたいと考えています。
すべてのスロットを同じシグナルに接続したいのですが、シグナルが送信されると、QString
引数の値に応じて適切なスロットのみが呼び出されQSignalMapper
ます。
これを行う組み込みのメカニズムはありますか?そうでない場合、これを達成する方法についてのアイデアはありますか?
前もって感謝します。
qt - QWidget を QObject の子として持つことは可能ですか?
私の主なアプリケーション オブジェクトは、、、 、およびその他のいくつかのコンポーネントQObject
をジャグリングするです。アプリはほとんどがトレイにあり、いくつかのオプション ダイアログなどがあります。QSystemTrayIcon
QDialog
QWindow
QMetaObject::connectSlotsByName()
ここで、これらのオブジェクトからの信号をメイン オブジェクトのスロットに接続するために使用したいと思います。それは 10 ~ 15 個なので、手で書くのは効率的、適切、専門的、現代的などとは思えません。
ただし、メイン オブジェクトが表示されないため、 myQObject
をベース オブジェクトの親として使用するQWidget
ことも、オブジェクトを inherit に変更することもできません。QWidget
アイデア?
c++ - Boost ライブラリのシグナルとスロットとマルチスレッド
私は Stackoverflow で同様の質問をしましたが、まだ良い答えが得られません:
この信号/スロットがどのように達成されるかについて、私はかなり困惑しています。
Q1: 以下のコードから、sig が 2 つの関数 (Hello() と World()) に接続されており、関数がシリアル化された方法で呼び出されているように見えます。これは、1 つの関数 (Hello()) が別の関数(World())に入る前に完了しますか? =>シングルスレッドプログラム
Q2: マルチスレッドのシグナル/スロットを有効にする方法はありますか? (=> World() はすぐに開始されます。Hello() が完了するのを待つ必要はありません。) または、推奨されない場合は、その理由を教えてください。 ?
出力: ハロー、ワールド!