問題タブ [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 はシグナルとスロットをどのように実装しますか?
誰かがQtシグナルとスロットメカニズムの実装の基本的な考え方を説明できますか? これらすべての Q_OBJECT マクロが「プレーンな C++ で」何をするのか知りたいです。この質問は、シグナルとスロットの使用に関するものではありません。
追加: Qt は moc コンパイラを使用して Qt-C++ をプレーンな C++ に変換することを知っています。しかし、モックは何をしますか?「moc_filename.cpp」ファイルを読み込もうとしましたが、このようなものが何を意味するのかわかりません
c++ - スロットの 1 つが true を返す場合、boost::signal がそのスロットを呼び出すのを止める方法はありますか?
私はブースト ライブラリを使用しています。私の質問は、boost::signals に関するものです。
多くの異なるスロットを呼び出す可能性のあるシグナルがありますが、1 つのスロットのみが呼び出しに一致するため、この特定のスロットが true を返し、呼び出しが停止するようにします。
出来ますか?
効率的ですか?
効率的でない場合、より良い方法を提案できますか?
boost - ブースト信号-サブスクライバーに送信されるオブジェクトの存続期間をどのように制御しますか?スマートポインタ?
Red Hat EnterpriseLinux5.3でboost::signals2を使用しています。
私のシグナルはオブジェクトコピーを作成し、そのポインターをサブスクライバーに送信します。これは、スレッドの安全性のために実装され、ワーカースレッドがオブジェクトの読み取りと同時にオブジェクトの文字列プロパティを更新するのを防ぎます(おそらく、ロックの使用を再検討する必要がありますか?)。
とにかく、私の懸念は、自分のスレッドでコピーされたオブジェクトへのポインターを逆参照する複数のサブスクライバーにあります。オブジェクトの有効期間を制御するにはどうすればよいですか?すべてのサブスクライバーがオブジェクトを処理し、オブジェクトを安全に削除できることをどのように知ることができますか?
ヒントや方向性を事前に感謝します、
-エド
qt - QMessageBoxによって隠された信号に接続する
リンクを含む警告QMessageBoxをユーザーに表示したいと思います。これは比較的簡単です。メッセージボックスでリッチテキストテキスト形式を設定していることを確認するだけでQMessageBox
、残りはセットアップで実行されます。ただし、ユーザーがリンクをクリックした場合は、メッセージボックスを閉じたいと思います(done()
ユーザーがメッセージを確認して決定したという意味です)。
問題:内部(テキストの保存に使用される)からQMessageBox
の信号を非表示にします。linkActivated
QLabel
QMessageBox
クラスを拡張して、コンストラクターでこの非常に醜いハックを実行できると思いました。
しかし、で見つかったラベルfindChild
はnullではなく、"qt_msgbox_label"
間違いなく正しく(ソースからc / pされた)、「そのようなシグナル/スロットはありません」というメッセージはありませんが、リンクをクリックしてもスロットが呼び出されることはありません。
振る舞いQDialog
を模倣するような自分の文章を書くことは避けたいと思います。QMessageBox
誰かが私がその信号をキャッチする方法について何か考えがありますか?
qt - Qtで特定のイベントによって発行されたすべてのシグナルを傍受する方法は?
イベントによってはかなりの数になると想像できますが、同時に、これはデバッグの最良の方法であり、興味深い教訓になると思います。
なぜそれが必要なのですか?に基づいたカスタム クラスを使用していますが、同じウィンドウでベースをQWidget
取り外しても展開されません。QDockWidget
このドック ウィジェットの接続が解除されたときにどのようなシグナルが発せられるかを知ることは、カスタム クラスでどのメソッドを上書きする必要があるかを選択するのに役立ちます。
つまり、ドキュメントから考えられるすべてのシグナルを確認するのではなく、アプリケーションで何らかのアクションを実行したときにどのシグナルが発せられるかを確認するだけです。
user-interface - スレッド間のQtシグナリング、1つはGUIスレッドですか?
moveToThreadを使用してQtでオブジェクトをあるスレッドから別のスレッドに移動するとはどういう意味ですか? オブジェクトをあるスレッド (GUI スレッド) から別のスレッド (動作) に移動し、Qt:connect がオブジェクトの適切なスロットを呼び出す moveToThread を使用する前でも、すべてが機能しているようです。
オブジェクトが存在する場所、GUI スレッドまたはワーカー スレッドによる違いはありますか?
編集:小さなプログラムを作成しましたが、QThread がシグナルとスロット関数と共にどのように機能するかわかりません。例で moveToThread の使用法を説明していただければ幸いです
c# - (どのように)異なる署名のデリゲートを操作するためにメソッドをバインド/再バインドすることは可能ですか?
私はc++でシグナルとスロットを使用したc++開発者です。これは、c#のデリゲートに類似しているようです。「バインド」によって提供される機能を探すのに迷い、何かが足りないと感じています。
c ++で可能な次のようなものは、デリゲートを使用したc#でも可能であると思います。これが私がC++で行うことのいくつかの疑似コードです:
残念ながら、c#デリゲートに関するバインディング/再バインディングへの参照を見つけることができませんでした。私は何かが足りないのですか?C#でこれを行うための根本的に異なる方法はありますか?
user-interface - GUI をフリーズせずに単一のスロットにブロッキング プロセスを実装するにはどうすればよいですか?
イベントがあり、対応する関数が呼び出されたとしましょう。この機能は外界と相互作用するため、長い遅延が発生することがあります。関数が待機またはハングすると、UI がフリーズし、これは望ましくありません。一方、関数を多くの部分に分割してシグナルを再発行する必要があると、時間がかかり、コードが大幅に分割される可能性があり、デバッグが難しくなり、読みにくくなり、開発プロセスが遅くなります。イベント ドリブン プログラミングに、1 回の関数呼び出しでプロセスを記述し、待機中に mainThread にその仕事をさせることができる特別な機能はありますか? たとえば、コンパイラはキーワードを認識してリターンを実装し、新しいスロットに接続された信号を自動的に再送信できますか? なぜこれが素晴らしいアイデアだと思うのですか;) Qtで作業しています
c++ - QTスロットは2回シグナリングされます
QT4.5では、
QTableWidgetを使用し、シグナルQTableWidget :: itemClicked()を次のようなカスタムスロットに接続しました。
テーブルに追加する行ごとに、このような接続を作成します。
問題は、スロットsloItemClickedが複数回呼び出されることです。X回呼び出されるようです。ここで、Xはテーブルの行数です。
しかし、それは常に同じ行を要求しています。(私が受け取るQTableWidgetItemは同じです)。
行をクリックすると削除するので、これは問題です。そのため、次に呼び出されたときに、QTableWidgetItemは無効になり、クラッシュします。
行が1つしかない場合は、すべてが期待どおりに機能します。
何か案が?
ありがとう
python - PyQt4 QDialog接続が確立されていません
私は PyQt4 とそれが提供するデザイナーを使用してアプリケーションに取り組んでいます。正常に動作するメイン ウィンドウ アプリケーションがありますが、カスタム メッセージ ダイアログを作成したいと考えていました。__init__
私はダイアログを設計し、メソッドでいくつかのカスタム シグナル/スロット接続を設定し、作成しif __name__=='__main__':
てテストを行いました。カスタム スロットは問題なく動作します。ただし、メイン ウィンドウ アプリケーションからダイアログのインスタンスを作成すると、どのボタンも機能しません。これが私のダイアログです:
このクラスを実行すると正常に動作し、view_image_button を押すとコンソールに hello world が出力されます。ただし、通話を使用すると
私のメイン ウィンドウ クラスでは、ダイアログは正しく表示されますが、クリックしても view_image_button は何もしません。解決策を探しましたが、役立つものは見つかりませんでした。さらに情報が必要な場合はお知らせください。これに関するヘルプをいただければ幸いです。
以下に要求されているように、簡潔にするためにメイン ウィンドウ クラスからいくつかのコードを追加して、無関係と思われるコードを削除するために省略記号を追加しました。まだ誰も何も思いつかない場合は、さらに追加します。(インデントが少しずれている場合は、コピペで発生しました。元のコードは正しいです)