ウィンドウをつくる その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