hakeの日記

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

ウィンドウをつくる その2

Ruby/Qteの勉強 その13

昨日のスクリプトにテキストボックス@ebox1をつくり、メソッドopenSubWindow内のサブウィンドウを開いている前後でメッセージを表示させてみる。

sw = SubWindow.new(self)
@ebox1.clear                          #追加
@ebox1.insertLine("Open Sub Window")  #追加
res = sw.exec()
@ebox1.insertLine("Close Sub Window") #追加

ところがこのままだと、サブウィンドウを閉じる前に"Close Sub Window"が表示されてしまう。これに対応する為にはSubWindowクラスのsuperを

super( nil, "", true)

のようにすれば良い(らしい)。これでサブウィンドウが閉じてから"Close Sub Window"が表示されるようになる。またこうすると"OK"でサブウィンドウを閉じた場合にはres=1、その他の場合にはres=0となる。“×”と“閉じる”ボタンで閉じた場合の区別をつけるためグローバル変数$pushPBを用意して、closeSubWindowメソッド内で1を代入させるようにしてみた。


クラス間の情報のやりとりをグローバル変数を用いて良いのだろうか、何か違う気がする。。。
(追加)$pushPBはSubWindowクラス内の変数にして、専用メソッドで読み出すのが正解かな?

#!/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,280,635,120)
      @ebox1.setReadOnly(true)

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

   def openSubWindow
      $pushPB = 0                                    #初期設定
      sw = SubWindow.new(self)
      @ebox1.clear                                   #テキストボックスクリア
      @ebox1.insertLine("Open Sub Window")           #メッセージ表示
      res = sw.exec()
      @ebox1.insertLine("Close Sub Window")          #メッセージ表示
      @ebox1.insertLine("res = " + res.to_s)         #resの値表示
      @ebox1.insertLine("$pushPB = " + $pushPB.to_s) #$pusPBの値表示
   end
end

class SubWindow < QDialog
   def initialize(parent)
#      super()
      super( nil, "", true) 
      setCaption(tr("サブウィンドウ"))
      setFixedSize(400,200) #サイズ指定

      @pb = QPushButton.new(tr("閉じる"),self)
      @pb.setGeometry(150,85,100,30)
      connect(@pb,QSIGNAL("clicked()"), self, 'closeSubWindow')
   end

   def closeSubWindow
      close()
      $pushPB = 1    #閉じるボタンで閉じた場合1を代入
   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