Qt-ユーザー入力を待つためにプログラムの実行を一時停止する正しい方法は何ですか?

ラングルソン

ユーザーが表示された画像上のポイントを選択する一連の手順を実行するプログラムがあります。ユーザーがこれらのポイントを選択している間、実行を一時停止する適切な方法がわかりません。現在、私は次のようなものを使用しています:

while(m_MouseCount < 2)
{
    qApp->processEvents(QEventLoop::WaitForMoreEvents);
    if(m_cancelFlag){
        // disconnect mousePressSignal
        return;
    }
}

私が遭遇している問題は、このループ中にウィンドウが閉じられたとき、プログラムがバックグラウンドで実行され続けることです。

この場合、有限状態マシンを使用する方が適切であることに気づきました。ここで行ったことは、「恐ろしい疑似同期」プログラミングです。ただし、FSMを使用した場合でも、ユーザーが選択した次の測定に進む前に、FSMがコースを実行するのを待つという問題があります。

ユーザー入力を待つより良い方法はありますか?

編集

QtのUIはイベント駆動型であり、通常は一時停止しないことを理解しています。私のプログラムは次のように機能します。

  1. ユーザーには写真が表示され、プッシュボタンを介していくつかのオプションが表示されます(切り抜き、分析の開始、キャンセル)
  2. ユーザーが作物を選択
  3. ユーザーは、画像をトリミングするために長方形を選択するように求められます(長方形が選択されるまで、プログラムは「一時停止」されます-キャンセルオプションはまだ存在します)
  4. ユーザーが完全分析を選択
  5. ユーザーは測定1を選択するように求められます。
  6. 2つのポイントが選択されるまで、プログラムは「一時停止」します。
  7. ユーザーは測定2を選択するように求められます。
  8. 2つのポイントが選択されるまで、プログラムは「一時停止」します。
  9. これは、すべての測定値が選択されるまで繰り返されます。
  10. 計算は測定値に基づいて行われます。

とにかく、ある種の一時停止や待機の周りは見当たりません。

火槍

最終結果がどうなるかは完全にはわかりませんが、UIを操作するときは、通常、独自のコードブロック/ループで何かを待とうとはしません。QT /他のフレームワークに、これらのループがどのように機能する必要があるかを処理させます。これには、「モーダル」ダイアログのブロックが含まれる場合と含まれない場合があります。

代わりに、物事(イベント)が発生するのを待つだけです。この場合、ユーザーが画像内の座標をクリックしたことをQTが通知するのを待ってから、それに応じてやりたいことを実行することをお勧めします。

ユーザーがタスクを完了する前にウィンドウを閉じようとしていることに気がある場合は、そのためのイベントもあります。

実際のコードではありません。

//measurements may want to be a UI thing, such as a table or whatever
//is suitable for your use . You would then also have the ability to go
//back and make corrections, etc.
measurements.push_back(Measurement("Measurement Foo"));
measurements.push_back(Measurement("Measurement Bar"));
currentMeasurement = 0;
myImage->addMouseDownHandler(std::bind(&MyApp::onImageClickedOn, this));
...

void MyApp::startMeasurement()
{
    auto &measurement = measurements[currentMeasurement];
    delete fromMarker; fromMarker = nullptr;
    instructionCtrl->setText(
        "Please select two points to define " +
        measurement.getName());
}
void MyApp::onImageClickedOn(MouseEvent event)
{
    if (!fromMarker)
    {   //Create a marker where the from/start point is
        //Likely wants to be visual/ui object to aid user
        fromMarker = new FromSelectMarker(myImage, event.mousePos);
    }
    else
    {
        //Second point
        auto from = fromMarker.getPos();
        auto to = event.mousePos;
        auto &measurement = measurements[currentMeasurement];
        measurement.setPositions(from, to);

        ++currentMeasurement;
        if (currentMeasurement < measurements.size()
        {
            startMeasurement();
        }
        else
        {
            //finished, do next thing
        }
    }

}

何らかの形のナビゲーションを使用して、多数の異なる有限の「状態」を通過する複雑な一連のユーザーが実際にいる場合は、FSMフレームワークが必要な場合があります。または、利用できる単純なものがない場合は、コードを整理して同様のものを取得できます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

プログラムにQtのシグナルを待たせる最も簡単な方法は何ですか?

分類Dev

Qtプログラムを終了する正しい方法は?

分類Dev

Qt自体をインストールせずにQtプログラムを実行するにはどうすればよいですか?

分類Dev

zまたはz-indexを設定するQtの正しい方法(プログラムで)

分類Dev

QtでQTreeWidgetの編集をプログラムで停止するにはどうすればよいですか?

分類Dev

ユーザーがJTextFieldに何かを入力するまで、プログラムを「一時停止」します

分類Dev

すべてのQtプログラムの何が問題になっているのかを知る方法は?

分類Dev

Qtで実行時に同時に開く2つのウィンドウでプログラムを作成するにはどうすればよいですか?

分類Dev

実行時にQt5でQtWebEngineが使用しているクロムバージョンを特定するにはどうすればよいですか?

分類Dev

ユーザー入力を待つか、定義された間隔で実行するプログラム?

分類Dev

WindowsでCMakeを使用してビルドされたQtプログラムをパッケージ化するにはどうすればよいですか?

分類Dev

Qt Creator5.7で1つのウィンドウしかないC ++ GUIプログラムを作成する方法ですが、クリックするたびに、セットアップウィザードなどの他の要素がウィンドウに表示されます。

分類Dev

ユーザーがテキストフィールドへの入力を一時停止してからコールバックを実行するまで待機するJSプラグインまたはjQuery関数を探しています

分類Dev

Qt環境の何が問題になっていますか?「「」にQtプラットフォームプラグイン「xcb」が見つからないか、ロードできませんでした」と報告されます。

分類Dev

QTcpSocketを介して来るデータのストリームから複雑なアルゴリズムを継続的に実行するための最良のQtスレッドソリューションは何ですか?

分類Dev

Qtでプログラム全体を記述せずに、Qtを使用してC ++プログラムからメソッドを実行します。

分類Dev

QT QThread :: Piでフリーズプログラムを実行しています

分類Dev

新しいライブラリを含めるときにQTプロジェクトの* .proファイルに何を追加するかを知る方法は?

分類Dev

外部実行可能ファイルをパイプとして使用するためのQt「方法」とは何ですか?

分類Dev

ネットワークc ++ / Qt上のいくつかのハードウェアに頻繁にpingを実行するための最良の方法

分類Dev

XPでQt5.10プログラムを実行することは可能ですか?

分類Dev

プログラムを再実行するか終了するためにユーザー入力を要求する

分類Dev

Qtにユーザー定義クラスを使用させるにはどうすればよいですか?

分類Dev

Qt WebGLストリーミングを介して複数のユーザーにQtアプリケーションを提供するにはどうすればよいですか?

分類Dev

Qtでは、文字列の一致を正規表現のキャプチャに置き換えるために必要なコードの量が最も少ないのは何ですか?

分類Dev

Puppeteerでユーザー入力を一時停止して待つにはどうすればよいですか?

分類Dev

Qtでプログラムでルート特権を介して印刷コマンドlpr-pを実行する方法

分類Dev

Qt Designerが互換性のないプラグインをロードしないようにするにはどうすればよいですか?

分類Dev

Qt5ユーザーからの入力中にwavサウンドを再生する

Related 関連記事

  1. 1

    プログラムにQtのシグナルを待たせる最も簡単な方法は何ですか?

  2. 2

    Qtプログラムを終了する正しい方法は?

  3. 3

    Qt自体をインストールせずにQtプログラムを実行するにはどうすればよいですか?

  4. 4

    zまたはz-indexを設定するQtの正しい方法(プログラムで)

  5. 5

    QtでQTreeWidgetの編集をプログラムで停止するにはどうすればよいですか?

  6. 6

    ユーザーがJTextFieldに何かを入力するまで、プログラムを「一時停止」します

  7. 7

    すべてのQtプログラムの何が問題になっているのかを知る方法は?

  8. 8

    Qtで実行時に同時に開く2つのウィンドウでプログラムを作成するにはどうすればよいですか?

  9. 9

    実行時にQt5でQtWebEngineが使用しているクロムバージョンを特定するにはどうすればよいですか?

  10. 10

    ユーザー入力を待つか、定義された間隔で実行するプログラム?

  11. 11

    WindowsでCMakeを使用してビルドされたQtプログラムをパッケージ化するにはどうすればよいですか?

  12. 12

    Qt Creator5.7で1つのウィンドウしかないC ++ GUIプログラムを作成する方法ですが、クリックするたびに、セットアップウィザードなどの他の要素がウィンドウに表示されます。

  13. 13

    ユーザーがテキストフィールドへの入力を一時停止してからコールバックを実行するまで待機するJSプラグインまたはjQuery関数を探しています

  14. 14

    Qt環境の何が問題になっていますか?「「」にQtプラットフォームプラグイン「xcb」が見つからないか、ロードできませんでした」と報告されます。

  15. 15

    QTcpSocketを介して来るデータのストリームから複雑なアルゴリズムを継続的に実行するための最良のQtスレッドソリューションは何ですか?

  16. 16

    Qtでプログラム全体を記述せずに、Qtを使用してC ++プログラムからメソッドを実行します。

  17. 17

    QT QThread :: Piでフリーズプログラムを実行しています

  18. 18

    新しいライブラリを含めるときにQTプロジェクトの* .proファイルに何を追加するかを知る方法は?

  19. 19

    外部実行可能ファイルをパイプとして使用するためのQt「方法」とは何ですか?

  20. 20

    ネットワークc ++ / Qt上のいくつかのハードウェアに頻繁にpingを実行するための最良の方法

  21. 21

    XPでQt5.10プログラムを実行することは可能ですか?

  22. 22

    プログラムを再実行するか終了するためにユーザー入力を要求する

  23. 23

    Qtにユーザー定義クラスを使用させるにはどうすればよいですか?

  24. 24

    Qt WebGLストリーミングを介して複数のユーザーにQtアプリケーションを提供するにはどうすればよいですか?

  25. 25

    Qtでは、文字列の一致を正規表現のキャプチャに置き換えるために必要なコードの量が最も少ないのは何ですか?

  26. 26

    Puppeteerでユーザー入力を一時停止して待つにはどうすればよいですか?

  27. 27

    Qtでプログラムでルート特権を介して印刷コマンドlpr-pを実行する方法

  28. 28

    Qt Designerが互換性のないプラグインをロードしないようにするにはどうすればよいですか?

  29. 29

    Qt5ユーザーからの入力中にwavサウンドを再生する

ホットタグ

アーカイブ