hakeの日記

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

ウィジェットの切り替え

Ruby/Qteの勉強 その21

ウィジェットを予め複数用意しておいてスタックすることで、簡単に切り替えて使用することができる。画面の切り替え等に使用が可能。
使用する数だけのQWidgetのインスタンスを用意し、QWidgetStackのインスタンスに.addWidgetすることでスタックする。実際に使用するボタンやテキストボックス等は各QWidgetのインスタンス上に配置させる。スタックする際に各ウィジェットに番号をつけておくことで、.raiseWidgetでその番号を指定してウィジェットを切り替える。

下の例では2個のウィジェット@w0と@w1を用意して、ボタンを押すことで切り替えを行っている。

#!/usr/bin/env ruby

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


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

      @stack = QWidgetStack.new(self)  #スタック作成
      setCentralWidget(@stack)         #@stackをウィンドウ全体に広げる

      @w0 = QWidget.new( @stack )      #ウィジェット0作成
      @w1 = QWidget.new( @stack )      #ウィジェット1作成
      @stack.addWidget( @w0, 0 )       #スタックに追加
      @stack.addWidget( @w1, 1 )
 
      @current = 0
      @stack.raiseWidget( @current )  #表示するウィジェットを指定

      #ウィジェット0の配置
      @msg0 = QLabel.new(tr("ウィジェット0"), @w0)
      @msg0.setGeometry(10,10,300,30)
      @ebox0 = QMultiLineEdit.new( @w0 )
      @ebox0.setGeometry(0,280,635,120)
      @pb0 = QPushButton.new(tr("ボタン0"), @w0)
      @pb0.setGeometry(320,5,100,30)
      connect(@pb0,QSIGNAL("clicked()"), self, 'chgWidget')

      #ウィジェット1の配置
      @msg1 = QLabel.new(tr("ウィジェット1"), @w1)
      @msg1.setGeometry(10,10,300,30)
      @ebox1 = QMultiLineEdit.new( @w1 )
      @ebox1.setGeometry(0,250,635,150)
      @pb1 = QPushButton.new(tr("ボタン1"), @w1)
      @pb1.setGeometry(420,5,100,30)
      connect(@pb1,QSIGNAL("clicked()"), self, 'chgWidget')
   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