問題タブ [qeventloop]

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 投票する
0 に答える
764 参照

c++ - QRunnable で QEventLoop を呼び出す (複数のデバイスに接続するため)

同時に最大 5 つのシリアル デバイスに接続するための QthreadPool があります。各シリアル デバイスは次のように定義されます。

GUI 内でボタンをクリックすると、次のようにシリアル デバイス マネージャーを呼び出しserialManager->startAcquisition(portNames)ます。

デバイスが接続されたら、デバイスをポーリングします。stop 関数が呼び出されると、スレッドは終了します。readyRead()内部を埋めるために、信号が放出されていることを期待していsensor->portDataます:

問題定義:readyRead()信号が発信されませんでした 。ここで、でイベントを処理するには、スレッドに独自のイベントループが必要であることを読みました。QRunnableだから私はそれぞれの機能に含めQEventLoop loopました。現在トリガーされており、しばらくの間各ポートからデータを受信すると、突然、次のようなセグメンテーション違反でアプリケーションがクラッシュします。Run()ComPortreadyRead()

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

c++ - Win32 アプリと QWinMigrate 間のキーボード イベントの管理

Qt ダイアログを従来の Win32 アプリケーションに統合しましたが、Qt->Win32 から伝播するキーボード イベントを管理する方法に少し困惑しています。Qt がイベント (編集ボックスへの入力など) を「処理」しているかどうかをテストし、これらのイベントがホスト アプリケーションに伝播するのを防ぐ方法はありますか?

Win32 アプリケーションには独自の非常に複雑なアクセラレータ システムがあり、ネイティブの編集ボックスを操作する場合、通常、アクセラレータを手動で無効にします。Qtダイアログは複数のアプリケーション間で共有されるウィジェットであるため、これを行うことはできません。

現在、ダイアログ全体でホスト アクセラレータを無効にしてフォーカスを得ていますが、編集ボックスからの kbd イベントの伝播を防ぐように Qt に指示することは可能でしょうか? 理想的には、QtDialogs コードを変更せずに (ただし、必要に応じて変更できますか?)

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

c++ - 複数の QEventLoops を並行して実行する (QtNetwork の場合)

Qt ネットワークをサポートする Ubuntu/Linux デスクトップで実行される古いプログラムを拡張しようとしています。これらのライブラリと LAN 通信を行うに.exec()は、QEventLoop を実行して実際に作業を開始する必要があります (つまり、接続の受け入れ、受信、送信など)。

問題

問題は、このイベント ループがメイン プログラムのどこにあるのかわからないことです。その設計について漠然と知っているため、できるだけ独立したソリューションを好みます。

私の考え

main-QEventLoop は必要ないことを既に確認しました。ネットワーキング (つまり、ネスト) のためだけに別のものを作成しても問題ありません。残念ながら、私のプログラムはネストされた - で停止し、メインプログラムも停止しているため、両方のループを並行して実行する方法がわかり.exec()ません。

したがって、私の主な意図は、実際には Qt-Networking を使用してメイン プログラムを拡張することです。他のソリューションも受け入れています。

0 投票する
5 に答える
2771 参照

c++ - QTimer::SingleShot オブジェクトが削除された後に発生する

この場合、 a が削除され、タイマーが起動された後、実行されtimerSlot()ますか? 非常にまれなクラッシュが発生していますが、それがこのロジックの怪しいものによるものかどうかはわかりません。

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

c++ - 別のイベントループなしで QFileDialog::getOpenFileName を実行しますか?

私は現在QFileDialog::getOpenFileNameを使用しています。ただし、この記事で提案されているように、ダイアログが開いているときにメイン アプリケーションを閉じると、これがクラッシュします。クラッシュを再現する方法の例をここで見ることができます:

here でQFileDialog説明されているように、代わりに通常のコンストラクターを使用できます。ただし、ネイティブの Windows ファイルを開くダイアログが表示されないようです。

クラッシュしないプログラムを取得し、Qt を介してネイティブの Windows ファイルを開くダイアログを使用する方法はありますか?

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

c++ - QUdpSocket 高速メッセージ読み取り

みんな!

QUdpSocket と readyRead シグナルの操作に奇妙な問題があります。思ったように機能していないと言えます。

QUdpSocket を作成してポートにバインドし、readyRead シグナルをスロットに接続して、以下のように保留中のデータグラムをすべて読み取ります。

そして私のreadBuffersコード

Qt::QueuedConnection を使用して問題を解決したと思っていましたが、今日、プロジェクトに別のウィジェットを追加し、100 ミリ秒ごとに更新しました。方法はわかりませんが、スロットが 2 秒後に信号を出さなくなりました。

タイマー間隔または送信データ レートを 1 秒に変更すると、すべて問題ありません。

すべてのクラスとウィジェットはメイン プログラムのスレッドにあり、別のスレッドは使用していませんが、使用する必要があるようです。

では、Qt eventloop によってシグナルがドロップされたのはなぜですか?

ソケットの状態を確認しましたが、バウンド後に変化しませんでした。

前もって感謝します

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

python - QtCore.QEventLoop() とリンクした後、QRadioButton をクリックできません

数日前、for ループで QRadioButton をチェック/チェック解除しなければならない状況がありました。これは、 QRadioButtonが毎回チェックされるまでループを待っているリンクです? これを実装QEventLoopした後、今日までうまくいきました。QRadioButton(pass) ボタンをクリックできるようになりましたが、2 番目の QRadioButton(fail) ではクリックできませんでした。

Fail QRadioButton はハングしたり無効になったりしませんが、クリックすることはできません。

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

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

そして、この radioExclusive 関数はこれを行います:-

この問題がどの時点で発生しているのかわかりません。