時刻表示とタイマー
Ruby/Qteの勉強 その37
画面に現在時刻を表示、スタートボタンで開始、ストップボタンで停止します。
時計の表示はQLCDNumberのオブジェクトを8桁で使用しています。QTimerのオブジェクト@timerを作成しスタートボタンが押されると1秒毎にシグナルtimeoutが発生、これを受けてメソッドdiaplayが実行されます。ちなみに@timer.startの第2引数をtrueにすると1回のみのシグナル発生になります。
メソッドdisplayでは、Qtimeのオブジェクトにより現在時刻を取得、これを変換して時刻表示させています。
あー、こんな便利なクラスにもっと早く気付いてたらSHOUTcastPlayerのスリープ機能もあんなに苦労しなくて済んだのに……orz
#!/usr/bin/env ruby require "qte" require "qpe" include Qte include Qpe class SampleWindow < QMainWindow def initialize() super() setCaption(tr("サンプル")) @v = QVBoxLayout.new(self, 20) @lcd = QLCDNumber.new(8, self) @lcd.setSegmentStyle( QLCDNumber::Flat ) @h = QHBox.new(self) @pbstart = QPushButton.new(tr("スタート"), @h) connect(@pbstart, QSIGNAL("clicked()"), self, 'start') @pbstop = QPushButton.new(tr("ストップ"), @h) connect(@pbstop, QSIGNAL("clicked()"), self, 'stop') # 画面レイアウト @v.addWidget(@lcd, 1) # LCDを大きく表示 @v.addWidget(@h) @timer = QTimer.new(self) # 設定した時間が経過したらシグナル発生 connect(@timer, QSIGNAL("timeout()"), self, 'display') @now = QTime.new(0, 0) display end # 現在時刻表示 def display @now.start # 現在時刻取得 @nowstr = @now.toString # QStringに変換 @lcd.display(@nowstr) # 表示 end # スタート def start @timer.start(1000, false) # 1sec毎にシグナル発生 end # タイマストップ def stop @timer.stop end end $defaultCodec = QTextCodec.codecForName("utf8") app = QPEApplication.new([$0]+ARGV) app.setDefaultCodec($defaultCodec) QApplication.setFont(QFont.new("lcfont", 18)) app.showMainWidget(SampleWindow.new) app.exec