Hatena::ブログ(Diary)

はけの徒然日記 このページをアンテナに追加 RSSフィード

2005 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 04 | 05 | 08 | 09 | 10 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 |
2011 | 01 | 02 | 03 | 04 | 11 | 12 |
2012 | 02 | 03 | 05 |
2014 | 02 | 03 | 04 | 05 | 12 |
2015 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 04 | 05 | 08 | 09 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 |

2006-09-30(Sat)

引数付きシグナル

Ruby/Qte勉強 その41

画面をタップしてその座標をテキストエリアに表示するプログラム。MyWidgetのmousePressEventにてシグナルtappedを発生、それを受けてMyLineEditのdispPosメソッドで座標を表示させる。その際にシグナルの引数として座標を示すクラスMyPointのオブジェクトを渡す。

シグナルで引数を持つ場合はオブジェクト作成の際にRSignal.new("Object")とし、sendWithで引数を渡す。

詳細は以下

http://noir.s7.xrea.com/rubyqte/?Ruby%2FQte%CE%AE%A5%B7%A5%B0%A5%CA%A5%EB%A1%A6%A5%B9%A5%ED%A5%C3%A5%C8#l2

Qtオブジェクトには渡せない型があるとのことで、試しにQPointを引数にしてみたらエラーになった。

#!/usr/bin/env ruby

require "qte"
require "qpe"
include Qte
include Qpe


class SampleWindow < QMainWindow
  def initialize()
    super()
    setCaption(tr("サンプル"))

    @h = QVBox.new(self)
    setCentralWidget(@h)

    @w = MyWidget.new(@h)
    @e = MyLineEdit.new(@h)

#   connect(@w.tapped, self, "tapped")
    connect(@w.tapped, @e, "dispPos")
  end

# def tapped(pos)
#   @e.setText("x = #{pos.x}, y = #{pos.y}")
# end
end

class MyWidget < QWidget
  attr_reader :tapped

  def initialize(parent)
    super(parent)
#   @tapped = RSignal.new("QPoint")
#   @pos = QPoint.new(0,0)
    @tapped = RSignal.new("Object")
    @pos = MyPoint.new(0,0)
    catchEvent
  end

  def mousePressEvent(e)
    @pos.setX(e.x)
    @pos.setY(e.y)
    @tapped.sendWith(@pos)
  end
end

class MyLineEdit < QLineEdit
  def initialize(parent)
    super(parent)
  end

  def dispPos(pos)
    setText("x = #{pos.x}, y = #{pos.y}")
  end
end

class MyPoint
  attr_reader :x, :y
  def initialize(x = 0, y = 0)
    @x = x
    @y = y
  end
  def setX(x)
    @x = x
  end
  def setY(y)
    @y = y
  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

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/hake/20060930/p2