hakeの日記

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

フォーカスポリシー

Ruby/Qteの勉強 その25

ウィンドウ上にテキストボックスやボタン等のウィジェットが配置されている場合、TABキーでフォーカスの移動することができる。各ウィジェットはデフォルトでフォーカス移動対象になっている模様、移動の順番はスクリプトで各ウィジェットインスタンスを作成した順番。フォーカスの移動対象から除外する場合はsetFocusPolicy( NoFocus )とする。明示的にフォーカスの移動対象にする場合は引数をStrongFocusやTabFocusとする。setFocusPolicyはQWidgetのメソッドである。

#!/usr/bin/env ruby

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


class SampleWindow < QMainWindow
   def initialize()
      super()
      setCaption(tr("サンプル"))
      @msg = QLabel.new(tr("これはサンプルプログラム\nTabによるフォーカス移動"),self)
      @msg.setGeometry(0,0,310,90)


      @ebox1 = QLineEdit.new(self)
      @ebox1.setGeometry(0,100,635,30)
      @ebox1.setFocusPolicy( StrongFocus ) #StrongFocus
      @ebox1.setText( "Focus" )

      @ebox2 = QLineEdit.new(self)
      @ebox2.setGeometry(0,140,635,30)
      @ebox2.setFocusPolicy( NoFocus )
      @ebox2.setText( "NoFocus" )

      @pb1 = QPushButton.new( "F", self)
      @pb1.setGeometry(320,5,100,30)
      @pb1.setFocusPolicy( TabFocus )     #TabFocus

      @pb2 = QPushButton.new( "NF", self)
      @pb2.setGeometry(430,5,100,30)
      @pb2.setFocusPolicy( NoFocus )

      bg = QVButtonGroup.new(self)
      bg.setTitle("Item")
      bg.setGeometry(10,200,120,180)

      @r1 = QRadioButton.new("F1", bg)
      @r1.setChecked(true)
      @r2 = QRadioButton.new("NF2", bg)
      @r2.setFocusPolicy( NoFocus )
      @r3 = QRadioButton.new("F3", bg)
      @r4 = QRadioButton.new("NF4", bg)
      @r4.setFocusPolicy( NoFocus )

      @combo1 = QComboBox.new(self)
      @combo1.setGeometry(170,200,160,30)
      @combo1.insertItem("F1")
      @combo1.insertItem("F2")

      @combo2 = QComboBox.new(self)
      @combo2.setGeometry(340,200,160,30)
      @combo2.setFocusPolicy( NoFocus )
      @combo2.insertItem("NF1")
      @combo2.insertItem("NF2")
   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