問題タブ [qt-signals]
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.
c++ - Qtでクロススレッドシグナルを発信するには?
Qt のドキュメントには、シグナルとスロットはdirect
、 、queued
およびであると記載されていますauto
。
また、スロットを所有するオブジェクトがシグナルを所有するオブジェクトとは異なるスレッドに「住んでいる」場合、そのようなシグナルを発行することはメッセージを投稿するようなものになると述べました-シグナルの発行は即座に戻り、スロットメソッドはターゲットスレッドのイベントループで呼び出されます。
残念ながら、ドキュメントには「lives」が何を意味するかは明記されておらず、例もありません。次のコードを試しました:
main.h:
main.cpp:
出力は次のとおりです。
MySlot()
呼び出されることはありません:(。私が間違っていることは何ですか?
qt - プライベート/パブリック qt シグナル
Qt シグナルは公開または非公開にできますか? クラス内でのみ見られる内部シグナルを作成できますか?
更新:いくつかの内部シグナルを持つクラスがあります。これらのシグナルを他のクラスから見えないようにするにはどうすればよいですか (カプセル化と情報隠蔽)。
c++ - シグナルとスロットを使用する場合と使用しない場合
私たちは本当に便利だと思うシグナルとスロットを提供する Qt を使用しています。ただし、大きな力には大きな責任が伴います。この機能を誤用するのは非常に簡単だと思います。
シグナルスロットの使用に関するベストプラクティスはありますか? この方法でいくつかの一般的なガイドラインを見つけるのに苦労しています。いくつかの質問 (私は明確な意見を持っていますが、私のチームのすべてのメンバーが同意しているわけではありません):
- シグナルを使用してエラーを報告しても問題ありませんか?
- シグナルが処理されると仮定してもよろしいですか?
- アクションを開始するためにシグナルを使用できますか? たとえば
signal displayInfoScreen()
、情報画面を表示するスロットで処理する必要があります。
シグナルを使用すべき/すべきでない場合についてのその他の意見は大歓迎です!
c++ - Qt信号とスロットのメモリリーク
Qtコードでvalgrindを実行していますが、アプリケーションが正常に終了しても、valgrindから次のレポートが表示されます。
すべての信号接続を切断し、オブジェクトも削除します。信号とスロットの接続量を増やすと、上記のリークが増加します。
誰かがこれを手伝ってくれる?
qt - 信号待ち
ファイルのコンテンツをサーバーにアップロードするアプリケーションに取り組んでいます。
ファイルをサーバーにアップロードするには、「QNetworkAccessManager」クラスを使用しています。非同期で動作するので、QEventLoop を使って同期で動作するように変更しました。
サンプル アプリケーションには 2 つのウィンドウがあります。1 番目はファイルを選択し、2 番目は進行状況を表示します。
ユーザーが最初のウィンドウでアップロード ボタンをクリックすると、2 番目のウィンドウが表示され、FileTransferオブジェクトを作成してアップロードを開始します。
ユーザーがフォームを閉じた場合にファイルをアップロードしているときに、ウィンドウのデストラクタで「<em>FileTransfer」の停止を呼び出し、その後「<em>FileTransfer」オブジェクトを削除します。
しかし、ここではUpload()関数がまだ完了していないため、クラッシュします。
私を助けてください: Upload() 関数が完了するまで'stop() ' 関数で待機する方法
c++ - シグナルによって送信されたオブジェクトの削除、シグナル内のオブジェクトの所有権、Qt
ここで、私のシグナル宣言:
そして、私がそれをどのように使用しているか:
ここに私の問題があります:myObjectの削除の責任者は誰ですか?
送信者コード、myObjectが使用される前に削除された場合はどうなりますか?ダングリングポインタ
信号に接続されているスロット、信号に接続されているスロットがないか、複数のスロットがある場合はどうなりますか?メモリリークまたはダングリングポインタ
Qtは組み込みシグナルでこの状況をどのように管理しますか?内部参照カウントを使用していますか?
あなたのベストプラクティスは何ですか?
c++ - 多重継承による Qt シグナルとスロットの使用
MyClass
Qt 組み込みオブジェクト ( ) からほとんどの機能を継承するクラス ( ) がありますQGraphicsTextItem
。QGraphicsTextItem
から間接的に継承しQObject
ます。MyClass
インターフェースも実装していますMyInterface
。
connect
とdisconnect
onを使用できる必要がありますMyInterface*
。しかし、インスタンスconnect
でdisconnect
のみ機能するようです。QObject*
Qt は QObject 派生クラスからの多重継承をサポートしていないため、から派生できませMyInterface
んQObject
。(とにかく、それはインターフェイスにとってあまり意味がありません。)
オンラインで問題についての議論がありますが、IMO 提案された解決策は、信号とスロットを接続することはできませんがMyInterface*
、派生型にキャストする必要があるため、一般的なケース (インターフェイスを介してオブジェクトにアクセスする) ではかなり役に立ちません。MyClass
は多くの 派生クラスの 1 つであるためMyInterface
、これは「コード臭い」if-this-cast-to-this-else-if-that-cast-to-that ステートメントを必要とし、インターフェイスの目的を無効にします。
この制限に対する適切な解決策はありますか?
更新:もし私dynamic_cast
がMyInterface*
to QObject*
(すべての派生クラスも最終的に から継承することを知っているので、それはうまくいくようです.つまり:MyInterface
QObject
しかし、これは本当に未定義の動作を求めているようです....
c++ - C++ Qt シグナルとスロットが起動しない
Qt プログラムでボタン信号をスロットに接続するのに問題があります。私のコードは次のとおりです。
メイン.cpp
MainWidget.h
MainWidget.cpp
プログラムは次を出力します。
コードは正しいようで、コンパイラの警告はありません。実行時にこの出力のみ。しかし、信号とスロットを正しく接続したようです。
c++ - Qt/C++:QListWidgetItemがチェックされたときのシグナル?
私のフォームには、QListWidget
checkable を含む がありますQListWidgetItems
。QListWidgetItem
チェックされている/チェックされていないイベントをキャプチャする方法を探しています。このようなシグナルが存在することはわかりませんが、間違っている可能性があります。私が現在行っているのは、QListWidget::itemClicked()
信号を使用して のをチェックすることcheckState
ですQListWidgetItem
が、このイベントはチェックマークがトグルされただけでなく、アイテムがクリックされるたびに発生するため、これは私が望むものではありません。誰でも助けてもらえますか?ありがとう!
qt - Qtのシグナルとスロットに関してdeleteとdeleteLaterはどのように機能しますか?
クラスQNetworkReplyのオブジェクトがあります。そのfinished()信号に接続されたスロットが(他のオブジェクトに)あります。信号は同期しています(デフォルトの信号)。スレッドは1つだけです。
ある時点で、両方のオブジェクトを削除したいと思います。これ以上の信号やそれらからの何かはありません。私は彼らがいなくなって欲しい。まあ、私は思った、私は使用します
しかし、私は本当にできますか?〜QObjectの仕様は次のように述べています。
保留中のイベントが配信されるのを待っている間にQObjectを削除すると、クラッシュが発生する可能性があります。
「保留中のイベント」とは何ですか?それは、私が電話をかけている間delete
、配信される「保留中のイベント」がすでにいくつかあり、それらがクラッシュを引き起こす可能性があり、実際に存在するかどうかを確認できないことを意味しますか?
だから私が呼ぶとしましょう:
安全であるために。
しかし、私は本当に安全ですか?はdeleteLater
、制御がそこに到達したときにメインループで処理されるイベントを追加します。deleteLaterが処理される前に、メインループで処理されるのを待っている、保留中のイベント(シグナル)が存在する可能性はありますobj1
か?それは非常に残念なことです。「やや削除された」ステータスをチェックし、すべてのスロットの着信信号を無視するコードを書きたくありません。obj2