hakeの日記

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

ウィジェットの切り替え その2

Ruby/Qteの勉強 その22

画面の一部を切り替える場合を考える、切り替えるエリアは前回と同じくQWidgetクラスのインスタンス@w0と@w1を用意してQWidgetStackのインスタンス@stackにaddWidgetしている。
画面構成を上から順にテキストボックス@ebox、@stack、ボタン@pbとして、QVBoxLayoutクラスのインスタンス@layに順番にaddWidgetしていく、@stackをaddWidgetしている部分の第2引数の“1”はこのエリアを伸長させる為である。

ターミナルから実行すると妙なメッセージが表示されるのが気になる(エラーではないけど)

#!/usr/bin/env ruby

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


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

      @stack = QWidgetStack.new(self)  #スタック作成

      @w0 = QWidget.new( @stack )      #ウィジェット0作成
      @w1 = QWidget.new( @stack )      #ウィジェット1作成
      @stack.addWidget( @w0, 0 )       #スタックに追加
      @stack.addWidget( @w1, 1 )

      #ウィジェット0の配置
      @msg0 = QLabel.new(tr("ウィジェット0のエリア"), @w0)
      @msg0.setGeometry(10,10,300,100)
      #ウィジェット1の配置
      @msg1 = QLabel.new(tr("ウィジェット1\nのエリア"), @w1) 
      @msg1.setGeometry(10,10,300,100)


      @current = 0
      @stack.raiseWidget( @current )  #表示するウィジェットを指定


      @ebox = QLineEdit.new( self )
      @pb = QPushButton.new(tr("ボタン"), self)
      connect(@pb,QSIGNAL("clicked()"), self, 'chgWidget')

      #画面レイアウト
      @lay = QVBoxLayout.new( self )
      @lay.addWidget( @ebox )         #上部
      @lay.addWidget( @stack, 1)      #中央を広げる
      @lay.addWidget( @pb )           #下部

   end

   def chgWidget     #ウィジェットの表示切替え
      if @current == 1 then
         @current = 0
      else
         @current = 1
      end
      @stack.raiseWidget( @current )
   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