2011-08-07 11 views
4

私は簡単なポート通信プログラムを書いています。アプリケーションのGUI側には、パラレルポートインターフェイスに信号を送る12個のボタンがあるパネルがあります。ポートとの通信が完了して作業しています。私が今必要とするのは、ボタンの自動切り替えです。目標は、ボタンを定期的に起動してポートに信号を送信するスクリーンセーバーの種類を開始することです。実際には、次のようになります。タイマーは2分間開始され、イベントが発生した場合は再起動されます。そうでない場合、タイマーがに達するとqt信号が出力され、切り替えが開始され、ボタンは自動的に5秒の間隔でclick()となります。Qtでインターバルを持つ信号を放出するには?

私の質問は以下のとおりです。

  • 任意のキー/マウスイベントが発生した場合にresetedされます開始タイマーを有効にする方法は?
  • スリープインターバルでボタン間の遷移を定義するにはどうすればよいですか?

答えて

6

タイミング部分にはQTimerを使用してください。

「スクリーンセーバー」のようなものでは、ワンショットタイマーを作成し、それを自分のカスタムスロットに接続し、間隔を2分に設定します。そのカスタムスロットで

activeTimer = new QTimer(this); 
activeTimer->setInterval(2*60*1000); 
activeTimer->setSingleShot(true); 
connect(activeTimer, SIGNAL(timeout()), this, SLOT(activateAutoClick())); 
activeTimer->start(); 

、2番目のカスタムスロット

void YourThing::activateAutoClick() { 
    autoTimer->setInterval(5*1000); 
    autoTimer->setSingleShot(false); 
    connect(autoTimer, SIGNAL(timeout()), this, SLOT(autoClick())); 
    autoTimer->start(); 
} 

に接続された第二の、非シングルショットタイマーを起動し、autoClickであなたのポートに信号を送るという点でやりたいです。

いずれかのタイマーをキャンセルするには、単にstop()メソッド/スロットを呼び出します。

機能作成し、「スクリーン・セーバー」動作を実装するには:1

ことを再起動し、その機能を呼び出すためにactiveTimerr->start(2*60*1000)を呼び出し

  • クリック

    1. コールautoTimer->stop()自動を無効にするには必要に応じてボタンの既存のスロットから行うことも、QWidgetmouseMoveEvent,keyPressedEventなどのイベントハンドラを再実装することもできます。 (ハンドラのマニュアルを必ず読んでください。具体的な準備が必要なものもあります)

  • 関連する問題