0

RubyQtでカスタム時計ウィジェットを作成しようとしていますgem install qtbindings。時計は毎秒現在の時刻で更新されます。そうではなく、コードは完璧に見えますが、なぜこれが機能しないのですか?

require "Qt4"

class ClockLabel < Qt::Label
    attr_accessor :timer
    def initialize(date_format = '%Y-%d-%mT%H:%M:%S')
        super()
        @date_format = date_format
        self.set_text(Time.now.strftime date_format)
    end

    def paint_event(event)
        super(event)
        painter = Qt::Painter.new(self)
        painter.draw_text(event.rect.x, event.rect.y, Time.now.strftime(@date_format))
    end

    def start
        @timer = Qt::Timer.new(self)
        self.connect(@timer, SIGNAL('timeout()'), self, SLOT('update()'))
        @timer.start(1000)
    end
end

if __FILE__ == $PROGRAM_NAME
    app = Qt::Application.new([])
    clock = ClockLabel.new()
    clock.start
    clock.show
    app.exec()
end
4

1 に答える 1

0

connect呼び出しを次のように置き換えると機能します

  @timer.connect(SIGNAL :timeout) {
    set_text(Time.now.strftime @date_format)
    update
  }

paint_event呼び出されることはなく、省略できます。これにより、ウィジェットが変更されていないというヒントが得られるため、タイマーがトリガーされたときにウィジェットを変更します。

于 2012-10-26T20:01:23.587 に答える