2017-07-20 6 views
0

ユーザーがボタンをクリックした後に操作を行う必要があり、それには時間がかかることがあります。どのようにして、 "ビジー"または "しばらくお待ちください"アイコン/メッセージ(旋回円など)を表示し、その間にユーザーがボタンを再度クリックしないようにするにはどうすればよいですか?ありがとう。Qtで長時間稼動している間は「お待ちください」?

+0

あなたが望むもののイメージを表示することができます。 – eyllanesc

+0

gifアニメーションをqdialogとshowで追加)) –

+0

イメージを表示すると、ユーザーがボタンをクリックするのを止める方法は?各ボタンにコントロールを追加する必要がありますか? – YeP

答えて

1

は、以下に示すように、「忙しい」アプリケーションを作るために、あなたはQApplicationオブジェクトの静的関数待機カーソルを設定しsetOverrideCursor(const QCursor &cursor)

使用してください。

​​

そして、あなたは仕事が

QApplication::restoreOverrideCursor(); 

いくつかのドキュメントのヘルプに行われていると感じたときに、機能の下に使用して復元:イベントフィルタを無効に、ウィンドウを無効にするには今すぐ

http://doc.qt.io/qt-5/qguiapplication.html#setOverrideCursor

をあなたのウィンドウクラスの関数。

"busy"または "notbusy"というグローバル変数を宣言します。例:_isBusy

イベントフィルタでは、次のように処理します。

eventfilterは、QObjectの仮想関数です。

したがって、以下のようにウィンドウクラスでオーバーライドできます。

bool MainWindow::eventFilter(QObject *obj, QEvent *event) 
{ 
    if (_isBusy) //your global variable to check "busy or "notbusy" 
    { 
     //Just bypass key and mouse events 
      switch(event->type()) 
      { 
      case QEvent::MouseButtonPress: 
      case QEvent::MouseButtonRelease: 
      case QEvent::KeyPress: 
      case QEvent::KeyRelease: 
      return true; 
      } 
    } 
} 

注:上記の関数宣言で「メインウィンドウには、」自分のクラス名です。また、switchステートメントでは、カウントをわずか4つのイベントに限定し、必要な数のイベントを追加しました。

+0

これはクールですが、これはちょうどカーソルがどのように見えるかを変更し、カーソルが「ビジー」であってもクリックすることができることがわかりました。ありがとう。 – YeP

+0

カーソルコードはカーソルを表示するだけです。その時間にウィンドウを無効にする場合は、ウィンドウクラスの "eventfilter"をオーバーライドし、主要な "キー"イベントと "マウス"イベントをバイパスします。 – Naidu

+0

忙しい場合のイベントフィルタを無効にする方法を説明した回答が更新されました。それが役に立てば幸い。 – Naidu

関連する問題