問題タブ [qt5.8]
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 シグナルがイベント キューによって処理されないのはなぜですか?
簡単な状況説明
CAN バスを介してカスタム プロトコルを介して通信するエンドレス プロセスを開始する最小限の GUI を使用しようとしています。
ここで読んだ内容に基づいて、コードを次のように構成しました。
一方で、2 つの単純なプッシュ ボタン「開始」と「停止」、つまり MainWindow を使用して GUI を処理するクラスがあります。
一方、上記のリンクで説明されているように、ステート マシンを使用してカスタム プロトコルを管理するクラス、つまり Worker.
その中間に、全体をつなぐコントローラーがあります。このコントローラーがここにあるのは、他のいくつかのタスクが処理されるためですが、これはこの記事の目的ではありません。
シグナルとスロットについて
ボタン信号 (released()) をコントローラーからの信号に接続しました。そのため、GUI は正確に何が開始されているかを認識していません。
これらのコントローラーの信号は、ワーカーからのスロットに接続されます。これらのスロットは、プロセスを開始および停止するためにあります。
スレッドについて
Worker インスタンスは独自の QThread に存在します。他のタスクが関与している可能性があるため、それぞれを独自のスレッドで処理する方がよいと判断しました。
開始すると、ワーカーのプロセスは、遷移に関する状態全体で状態マシンを進化させるシグナル/スロットを介して処理されます。私が正しければ、シグナル/スロット メカニズムにより、スレッドのイベント ループはそのキューからイベントを処理できます。
問題
私の開始信号はワーカーに正しく送信され、プロセスが開始され、したがってステートマシンが開始されます。このマシンは、停止信号がユーザーによって要求されるまで周期的です。ただし、ユーザーが「停止」ボタンをクリックすると、関連付けられているスロットは呼び出されません。その間、マシンは際限なく実行され続け、停止要求が表示されません (実際に何が実行されたかを確認するために、いくつかのデバッグ メッセージを表示しました)。
コード スニペット
コード スニペットを次に示します。MainWindow.h
MainWindow.cpp
Controller.h
Controller.cpp (パブリック QObject を継承)
Worker は、列挙型のState
とを使用してステート マシンを処理します。Transition
Worker.h
Worker.cpp (パブリック QObject を継承)
.pro ファイル
免責事項コードが正しく終了しません。簡単に強制終了できるように、IDE で起動することをお勧めします。
これらのコード スニペットは、Qt5.8.0 MinGW 32 ビットでビルドされています。問題を再現するには、「開始」を押すだけで、コンソールにデバッグ メッセージが表示されます。次に、「停止」を押すと、メッセージが来続け、本来のように停止しません。
シグナルを使用する代わりにstopProcess()
から直接呼び出すことで回避策を見つけました。Controller
そうすることで、正しく設定さstopRequested
れ、プロセスが停止します。
Controller
ただし、イベントキューが?からの信号を処理しないのはなぜだろうと思っていました。ステート マシンがシグナル/スロットで処理されている場合でも、イベント キューはイベントが到着したときにイベントを処理できます。
( GUI が信号を正しく送信し、このスロットが実際に実行されるかどうかを確認するためにController
、信号を に送信する中間スロットを に配置しようとしましたが、スロットは呼び出されないままです。)Worker
stopProcess()
何かご意見は ?
qt - ChildrenRect always returns 0
I have a Flickable item in where I want to put a customized flow component, so I created the Flickable like this:
Then in my main.qml I have this (The file above is MyFlickable, and the MyFlow is a flow with specific properties):
This works great but the problem is that I want to be able to reuse this item with as little overhead as possible. Setting the id inside of my MyFlow doesn't work, and I tried this
as suggested in here under contentWidth section: http://doc.qt.io/qt-5/qml-qtquick-flickable.html#contentItem-prop
but that always returns 0. I've tried a couple of other ways to receive onCompleted signals but I get the same luck. This doesn't work for example:
Which in my mind should be the same as accessing the item through the id, bu apparently not.
So my question is: how do I get to height of my flow after all the components have been added?
Thanks in advance!
qt5.8 - VS 2015 通信の Qt
こんにちは、Visual Studio 2015 通信で Qt アプリケーション Test2 をビルドしているときに、次のエラーが発生します。編。
この問題を解決するのを手伝ってください。