hakeの日記

Windows環境でプログラミングの勉強をしています。

ボタンをつくる

Ruby/Qteの勉強 その5

以下のようにQPushButtonクラスを使用することでボタンをつくることができる。

@pb1 = QPushButton.new(tr("ボタン1"),self)
@pb1.setGeometry(320,5,100,30)

このままでは何も動作しないのでボタンをクリックしたときに実行させるメソッドcopy_eboxを作成してみる。このメソッドはテキストボックス@ebox1に書かれている内容を@ebox2にコピーする動作をする。

def copy_ebox
    naiyou = @ebox1.text.local8Bit.to_str
    @ebox2.setText(tr(naiyou))
end

ボタン@pb1とメソッドcopy_eboxを関連させるには以下のように記述

connect(@pb1,QSIGNAL("clicked()"), self, 'copy_ebox')

これで“ボタン1”をクリックするとテキストボックス@ebox1に書かれている内容が@ebox2にコピーされる。

#!/usr/bin/env ruby

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


class SampleWindow < QMainWindow
   def initialize()
      super()
      setCaption(tr("サンプル"))
      @msg = QLabel.new(tr("これはサンプルプログラム"),self)
      @msg.setGeometry(10,10,300,30)

      @ebox1 = QMultiLineEdit.new(self)
      @ebox1.setGeometry(0,160,635,120)
      @ebox1.setText(tr("あいうえお"))

      @ebox2 = QMultiLineEdit.new(self)
      @ebox2.setGeometry(0,280,635,120)
      @ebox2.setReadOnly(true)

      @pb1 = QPushButton.new(tr("ボタン1"),self)
      @pb1.setGeometry(320,5,100,30)
      connect(@pb1,QSIGNAL("clicked()"), self, 'copy_ebox')
   end

   def copy_ebox
       naiyou = @ebox1.text.local8Bit.to_str
       @ebox2.setText(tr(naiyou))
   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