ウィジェットの切り替え
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