逆引き Ruby/Qt

GUI コンポーネント全般

幅や高さを指定する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
hello = QLabel.new( "Hello world!", nil )
hello.resize( 200, 200 )
hello.setAlignment(Qt::AlignCenter)

a.setMainWidget( hello )
hello.show()
a.exec()

Widget の見ためを変える

Widget 間の間隔(余白)を設定する

前景、背景色を変える

アクティブ時(マウスが上に来たとき)の前景、背景色を変える

フォントとフォントの大きさを変える

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
hello = QLabel.new( "Hello world!", nil )
hello.setFont( QFont.new( "Times", 18, QFont::Bold ) )

a.setMainWidget( hello )
hello.show()
a.exec()

フォントの色を変える

フォントの一覧を取得する

フォーカスを移動する

イメージつきにする

マウスカーソルの形状を変更する

時間のかかる処理時にマウスカーソルの形状を時計にする

独自カーソルを使用する

Widget の種類を取得する

Widget 全てに対して同じ属性を適用する

配置

座標で指定して配置する

require "qt2"
include Qt2

class MyMainWindow < QWidget
  def initialize

    hello = QLabel.new( "Hello world!", self )
    hello.setGeometry( 100, 50, 200, 100 )
    hello.setAlignment(Qt::AlignCenter)
  end
end

a = QApplication.new([$0]+ARGV)
w = MyMainWindow.new

a.setMainWidget( w )
w.show()
a.exec()

垂直方向に配置する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
vbox = QVBox.new
vbox.setMargin(10)
a.setMainWidget(vbox)

QPushButton.new("Button1", vbox)
QPushButton.new("Button2", vbox)
QPushButton.new("Button3", vbox)

vbox.show()
a.exec()

水平方向に配置する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
hbox = QHBox.new
hbox.setMargin(10)
a.setMainWidget(hbox)

QPushButton.new("Button1", hbox)
QPushButton.new("Button2", hbox)
QPushButton.new("Button3", hbox)

hbox.show()
a.exec()

格子状に配置する

横2つに並べられる

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
grid = QGrid.new( 2, nil)
grid.setMargin(10)

l1 = QLabel.new( "Label1", grid )
l1.setFrameStyle(QFrame::Box | QFrame::Raised)
l2 = QLabel.new( "Label2", grid )
l2.setFrameStyle(QFrame::Box | QFrame::Raised)
l3 = QLabel.new( "Label3", grid )
l3.setFrameStyle(QFrame::Box | QFrame::Raised)

a.setMainWidget( grid )
grid.show()
a.exec()

Layout クラスを継承している QGridLayout クラスを使うと、

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
f = QFrame.new( nil )
grid = QGridLayout.new( f, 1, 2 )
grid.setMargin(10)

l1 = QLabel.new("Label1", f)
l1.setFrameStyle(QFrame::Box | QFrame::Raised)
grid.addWidget(l1, 0, 0)

l2 = QLabel.new( "Label2", f )
l2.setFrameStyle(QFrame::Box | QFrame::Raised)
grid.addWidget(l2, 0, 1)

l3 = QLabel.new( "Label3", f )
l3.setFrameStyle(QFrame::Box | QFrame::Raised)
grid.addWidget(l3, 1, 2)

a.setMainWidget( f )
f.show()
a.exec()

Widget 間の間隔(余白)を設定する

Widget を非表示にする

Widget 間の幅を揃える

親 Widget が大きくなったときそれに合わせて Widget を大きくする

格子状の配置でいくつかのセルをまたがらせる

イベント

マウスの第一ボタンをクリックしたときの動作を設定する

マウスをダブルクリックしたときの動作を設定する

マウスの第二ボタンをクリックしたときの動作を設定する

マウスを移動したときの動作を設定する

マウスの座標を取得する

Enterキーを押したときの動作を設定する

どのキーが押されたかを取得する

Widget にフォーカスが移って来たときの動作を設定する

ファンクションキー F1 でヘルプを表示する

特殊キー(Shift, Ctrl, ALT)などが押されたどうかを知る

C-x C-c で終了する

テンキー入力であるかどうかを知る

Label クラス

Label クラスを使用する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
hello = QLabel.new( "Hello world!", nil )

a.setMainWidget( hello )
hello.show()
a.exec()

表示後にテキストを変更する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
hello = QLabel.new( "Hello world!", nil )
hello.setText("Hello!")

a.setMainWidget( hello )
hello.show()
a.exec()

表示したテキストを取得する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
hello = QLabel.new( "Hello world!", nil )

a.setMainWidget( hello )
hello.show()

p hello.text()           # => #<Qt2::QString:0x40be9c48>
puts hello.text().to_str # => "Hello world!"

a.exec()

日本語が含まれている場合 local8Bit で変換してから Ruby Stringに戻す。

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
codec = QTextCodec::codecForLocale()
a.setDefaultCodec(codec)

hello = QLabel.new(tr("こんにちは"), nil )

a.setMainWidget( hello )
hello.show()

p hello.text()           # => #<Qt2::QString:0x40be9c48>
puts hello.text().local8Bit.to_str # => "こんにちは"

a.exec()

文字の位置揃えをする

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
hello = QLabel.new( "Hello world!", nil )
hello.resize( 200, 120 )
#hello.setAlignment(Qt::AlignLeft)
hello.setAlignment(Qt::AlignCenter)
#hello.setAlignment(Qt::AlignRight)
#hello.setAlignment(Qt::AlignTop)
#hello.setAlignment(Qt::AlignBottom)

a.setMainWidget( hello )
hello.show()
a.exec()

文字の大きさと色を設定する

require "qt2"
include Qt2

str = <<EOM
<font size=10 color="Red">
Hello world!
</font>
EOM

a = QApplication.new([$0]+ARGV)
hello = QLabel.new( str, nil )
hello.resize( 300, 120 )

a.setMainWidget( hello )
hello.show()
a.exec()

複数行表示する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
hello = QLabel.new( "Ruby\nPython\nPerl", nil )

a.setMainWidget( hello )
hello.show()
a.exec()

選択可能なラベルを作る

イメージつきラベルを使用する

LCDNumber クラス

LCDNumber クラスを使用する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
lcd = QLCDNumber.new(2, nil )
lcd.resize(100, 100)
lcd.display(10)

a.setMainWidget( lcd )
lcd.show()
a.exec()

表示する桁数を設定する

newするときに設定するか、もしくは、QLCDNumber#setNumDigits を使用する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
lcd = QLCDNumber.new(nil)
lcd.resize(100, 100)
lcd.display(10)
lcd.setNumDigits(3)

a.setMainWidget( lcd )
lcd.show()
a.exec()

2, 8, 16 進表示にする

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
lcd = QLCDNumber.new(nil )
lcd.resize(100, 100)
lcd.display(10)
lcd.setBinMode
#lcd.setHexMode
#lcd.setDecMode

a.setMainWidget( lcd )
lcd.show()
a.exec()

表示の外観を設定する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
lcd = QLCDNumber.new(nil )
lcd.resize(100, 100)
lcd.display(10)
lcd.setSegmentStyle(QLCDNumber::Outline)
lcd.setSegmentStyle(QLCDNumber::Filled)
lcd.setSegmentStyle(QLCDNumber::Flat)

a.setMainWidget( lcd )
lcd.show()
a.exec()

PushButton クラス

PushButton クラスを使用する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
hello = QPushButton.new( "Hello world!", nil )
Qt2::connect( hello, QSIGNAL("clicked()"), a, "quit" )

a.setMainWidget( hello )
hello.show()
a.exec()

Enter で選択できるようにする

ショートカットできるようにする

ボタンを使用不可にする

イメージつきボタンを使用する

CheckBox クラス

CheckBox クラスを使用する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
vbox = QVBox.new
vbox.setMargin(10)
a.setMainWidget(vbox)

bg = QVButtonGroup.new(vbox)
bg.setTitle("Languages")
#bg.setExclusive(true)
cb = QCheckBox.new("Ruby", bg)
cb.setChecked(true)
QCheckBox.new("Python", bg)
QCheckBox.new("Perl", bg)

vbox.show()
a.exec()

ボタンの選択、非選択を切り換える

require "qt2"
include Qt2

class CheckBoxDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @cb = QCheckBox.new("Ruby", @vbox)
    @b1 = QPushButton.new("select", @vbox)
    @b2 = QPushButton.new("deselect", @vbox)
    @b3 = QPushButton.new("toggle", @vbox)
  end

  def callback1
    @cb.setChecked(true)
  end

  def callback2
    @cb.setChecked(false)
  end

  def callback3
    @cb.toggle
  end

  def run
    Qt2::connect(@b1, QSIGNAL('clicked()'), self, 'callback1')
    Qt2::connect(@b2, QSIGNAL('clicked()'), self, 'callback2')
    Qt2::connect(@b3, QSIGNAL('clicked()'), self, 'callback3')

    @vbox.show()
    @a.exec()
  end
end

CheckBoxDemo.new.run

チェックされているかどうか調べる

require "qt2"
include Qt2

class CheckBoxDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @cb = QCheckBox.new("Ruby", @vbox)
    @b = QPushButton.new("check", @vbox)
  end

  def callback
    print "#{@cb.isChecked}\n"
  end

  def run
    Qt2::connect(@b, QSIGNAL('clicked()'), self, 'callback')

    @vbox.show()
    @a.exec()
  end
end

CheckBoxDemo.new.run

ビットマップを使用する

RadioButton クラス

RadioButton クラスを使用する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
vbox = QVBox.new
vbox.setMargin(10)
a.setMainWidget(vbox)

bg = QVButtonGroup.new(vbox)
bg.setTitle("Languages")
#bg.setExclusive(true)
rb = QRadioButton.new("Ruby", bg)
rb.setChecked(true)
QRadioButton.new("Python", bg)
QRadioButton.new("Perl", bg)

vbox.show()
a.exec()

ボタンの選択、非選択を切り換える

require "qt2"
include Qt2

class RadioButtonDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    bg = QVButtonGroup.new(@vbox)
    bg.setTitle("Languages")

    @rb = QRadioButton.new("Ruby", bg)
    @rb.setChecked(true)
    QRadioButton.new("Python", bg)
    QRadioButton.new("Perl", bg)
    @b1 = QPushButton.new("select", @vbox)
    @b2 = QPushButton.new("deselect", @vbox)
    @b3 = QPushButton.new("toggle", @vbox)
  end

  def callback1
    @rb.setChecked(true)
  end

  def callback2
    @rb.setChecked(false)
  end

  def callback3
    @rb.toggle
  end

  def run
    Qt2::connect(@b1, QSIGNAL('clicked()'), self, 'callback1')
    Qt2::connect(@b2, QSIGNAL('clicked()'), self, 'callback2')
    Qt2::connect(@b3, QSIGNAL('clicked()'), self, 'callback3')

    @vbox.show()
    @a.exec()
  end
end

RadioButtonDemo.new.run

どのボタンが選択されているかどうかを調べる

require "qt2"
include Qt2

class RadioButtonDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    bg = QVButtonGroup.new(@vbox)
    bg.setTitle("Languages")

    @rb = QRadioButton.new("Ruby", bg)
    @rb.setChecked(true)
    QRadioButton.new("Python", bg)
    QRadioButton.new("Perl", bg)

    @b = QPushButton.new("check", @vbox)
  end

  def callback
    print "#{@rb.isChecked}\n"
  end

  def run
    Qt2::connect(@b, QSIGNAL('clicked()'), self, 'callback')

    @vbox.show()
    @a.exec()
  end
end

RadioButtonDemo.new.run

ビットマップを使用する

LineEdit クラス

LineEdit クラスを使用する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
e = QLineEdit.new("")

a.setMainWidget( e )
e.show()
a.exec()

あらかじめ文字列を入力しておく

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
e = QLineEdit.new("Hello!")

a.setMainWidget( e )
e.show()
a.exec()

文字列を挿入する

入力内容を取得する

require "qt2"
include Qt2

class LineEditDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @e = QLineEdit.new("Hello!", @vbox)
    @b = QPushButton.new("Print!", @vbox)
  end

  def callback
    print "#{@e.text.to_str}\n"
  end

  def run
    Qt2::connect(@b, QSIGNAL('clicked()'), self, 'callback')

    @vbox.show()
    @a.exec()
  end
end

LineEditDemo.new.run

本当にこれで良い?

入力内容をクリアする

require "qt2"
include Qt2

class LineEditDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @e = QLineEdit.new("Hello!", @vbox)
    @b = QPushButton.new("Clear!", @vbox)
  end

  def callback
    @e.clear
  end

  def run
    Qt2::connect(@b, QSIGNAL('clicked()'), self, 'callback')

    @vbox.show()
    @a.exec()
  end
end

LineEditDemo.new.run

パスワードの入力を行う

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
e = QLineEdit.new("")
e.setEchoMode(QLineEdit::Password)

a.setMainWidget( e )
e.show()
a.exec()

数値のみ入力できるようにする

入力最大文字数を設定する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
e = QLineEdit.new("")
e.setMaxLength(5)

a.setMainWidget( e )
e.show()
a.exec()

Read Only にする

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
e = QLineEdit.new("")
e.setReadOnly(true)

a.setMainWidget( e )
e.show()
a.exec()

選択部分を取得する

選択部分を消去する

特定の領域を選択状態にする

フォーカスされたら全体を選択状態にする

日本語入力を開始する

日本語入力を自動的にONする

クリップボードを使う

require "qt2"
include Qt2

class LineEditDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @e = QLineEdit.new("Hello!", @vbox)
    @b1 = QPushButton.new("Cut", @vbox)
    @b2 = QPushButton.new("Copy", @vbox)
    @b3 = QPushButton.new("Paste", @vbox)
  end

  def callback1
    @e.cut
  end

  def callback2
    @e.copy
  end

  def callback3
    @e.paste
  end

  def run
    Qt2::connect(@b1, QSIGNAL('clicked()'), self, 'callback1')
    Qt2::connect(@b2, QSIGNAL('clicked()'), self, 'callback2')
    Qt2::connect(@b3, QSIGNAL('clicked()'), self, 'callback3')

    @vbox.show()
    @a.exec()
  end
end

LineEditDemo.new.run

カーソル位置を取得する

require "qt2"
include Qt2

class LineEditDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @e = QLineEdit.new("Hello!", @vbox)
    @b = QPushButton.new("Cursor Position", @vbox)
  end

  def callback
    print "#{@e.cursorPosition}\n"
  end

  def run
    Qt2::connect(@b, QSIGNAL('clicked()'), self, 'callback')

    @vbox.show()
    @a.exec()
  end
end

LineEditDemo.new.run

Enter を入力したときの動作を設定する

require "qt2"
include Qt2

class LineEditDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @e = QLineEdit.new("Hello!", @vbox)
  end

  def callback
    print "#{@e.text.to_str}\n"
  end

  def run
    Qt2::connect(@e, QSIGNAL('returnPressed()'), self, 'callback')

    @a.setMainWidget( @e )
    @e.show()
    @a.exec()
  end
end

LineEditDemo.new.run

Enter で入力を完了できるようにする

Enter で次の入力欄に移動できるようにする

入力内容を別 Widget にリアルタイムで反映する

MultiLineEdit クラス

MultiLineEdit クラスを使用する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
e = QMultiLineEdit.new(nil)

a.setMainWidget( e )
e.show()
a.exec()

文字列を挿入する

#!/usr/bin/env ruby

require "qt2"
include Qt2

class MultiLineEditDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @e = QMultiLineEdit.new(@vbox)
    @e.setText("Test")

    @b = QPushButton.new("Append", @vbox)
  end

  def callback
    @e.append("foo")
  end

  def run
    Qt2::connect(@b, QSIGNAL('clicked()'), self, 'callback')

    @vbox.show()
    @a.exec()
  end
end

MultiLineEditDemo.new.run

スクロールバーを付ける

テキストの全内容を取得する

#!/usr/bin/env ruby

require "qt2"
include Qt2

class MultiLineEditDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @e = QMultiLineEdit.new(@vbox)
    @e.setText("Test")

    @b = QPushButton.new("get Text", @vbox)
  end

  def callback
    puts @e.text.to_str
  end

  def run
    Qt2::connect(@b, QSIGNAL('clicked()'), self, 'callback')

    @vbox.show()
    @a.exec()
  end
end

MultiLineEditDemo.new.run

入力内容をクリア, Undo, Redo する

require "qt2"
include Qt2

class MultiLineEditDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @e = QMultiLineEdit.new(@vbox)
    @b1 = QPushButton.new("Clear", @vbox)
    @b2 = QPushButton.new("Undo", @vbox)
    @b3 = QPushButton.new("Redo", @vbox)
  end

  def callback1
    @e.clear
  end

  def callback2
    @e.undo
  end

  def callback3
    @e.redo
  end

  def run
    Qt2::connect(@b1, QSIGNAL('clicked()'), self, 'callback1')
    Qt2::connect(@b2, QSIGNAL('clicked()'), self, 'callback2')
    Qt2::connect(@b3, QSIGNAL('clicked()'), self, 'callback3')

    @vbox.show()
    @a.exec()
  end
end

MultiLineEditDemo.new.run

入力最大文字数を設定する

Read Only にする

#!/usr/bin/env ruby

require "qt2"
include Qt2

class MultiLineEditDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @e = QMultiLineEdit.new(@vbox)
    #@e.setReadOnly(true)
    @e.setText("Test")

    @b = QPushButton.new("Read Only Toggle", @vbox)
  end

  def callback
    @e.setReadOnly(!@e.isReadOnly)
  end

  def run
    Qt2::connect(@b, QSIGNAL('clicked()'), self, 'callback')

    @vbox.show()
    @a.exec()
  end
end

MultiLineEditDemo.new.run

Read Only でもコードからは text の設定はできる

クリップボードを使う

require "qt2"
include Qt2

class MultiLineEditDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @e = QMultiLineEdit.new(@vbox)
    @b1 = QPushButton.new("Cut", @vbox)
    @b2 = QPushButton.new("Copy", @vbox)
    @b3 = QPushButton.new("Paste", @vbox)
  end

  def callback1
    @e.cut
  end

  def callback2
    @e.copy
  end

  def callback3
    @e.paste
  end

  def run
    Qt2::connect(@b1, QSIGNAL('clicked()'), self, 'callback1')
    Qt2::connect(@b2, QSIGNAL('clicked()'), self, 'callback2')
    Qt2::connect(@b3, QSIGNAL('clicked()'), self, 'callback3')

    @vbox.show()
    @a.exec()
  end
end

MultiLineEditDemo.new.run

カーソル位置を取得する

画像を表示する

文字の属性を変更する

文字に下線を引く

文字の上に横線を引く

TextView クラス

TextView クラスを使用する

TextBrowser クラス

TextBrowser クラスを使用する

ListBox クラス

ListBox クラスを使用する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)

list = QListBox.new(nil)
for i in 0..10
  list.insertItem("item #{i}")
end

a.setMainWidget( list )
list.show()
a.exec()

項目を追加する

require "qt2"
include Qt2

class ListBoxDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @l = QListBox.new(@vbox)
    @b = QPushButton.new("insert", @vbox)

    @i = 1
  end

  def callback
    @l.insertItem("item #{@i}")
    @i += 1
  end

  def run
    Qt2::connect(@b, QSIGNAL('clicked()'), self, 'callback')

    @vbox.show()
    @a.exec()
  end
end

ListBoxDemo.new.run

項目を削除する

全項目を削除する

require "qt2"
include Qt2

class ListBoxDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @l = QListBox.new(@vbox)
    @b1 = QPushButton.new("insert", @vbox)
    @b2 = QPushButton.new("clear", @vbox)

    @i = 1
  end

  def callback1
    @l.insertItem("item #{@i}")
    @i += 1
  end

  def callback2
    @l.clear
  end

  def run
    Qt2::connect(@b1, QSIGNAL('clicked()'), self, 'callback1')
    Qt2::connect(@b2, QSIGNAL('clicked()'), self, 'callback2')

    @vbox.show()
    @a.exec()
  end
end

ListBoxDemo.new.run

項目数を取得する

require "qt2"
include Qt2

class ListBoxDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @l = QListBox.new(@vbox)
    @b1 = QPushButton.new("insert", @vbox)
    @b2 = QPushButton.new("number", @vbox)

    @i = 1
  end

  def callback1
    @l.insertItem("item #{@i}")
    @i += 1
  end

  def callback2
    print "#{@l.count}\n"
  end

  def run
    Qt2::connect(@b1, QSIGNAL('clicked()'), self, 'callback1')
    Qt2::connect(@b2, QSIGNAL('clicked()'), self, 'callback2')

    @vbox.show()
    @a.exec()
  end
end

ListBoxDemo.new.run

選択された項目を取得する

選択された項目数を取得する

複数選択できるリストボックスを作る

require "qt2"
include Qt2

class ListBoxDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @l = QListBox.new(@vbox)
    for i in 0..10
      @l.insertItem("item #{i}")
    end

    bg = QVButtonGroup.new(@vbox)
    bg.setTitle("Languages")

    @rb1 = QRadioButton.new("Single", bg)
    @rb1.setChecked(true)
    @rb2 = QRadioButton.new("Extended", bg)
    @rb3 = QRadioButton.new("Multi", bg)
    @rb4 = QRadioButton.new("NoSelection", bg)
  end

  def callback1
    @l.setSelectionMode(QListBox::Single)
  end

  def callback2
    @l.setSelectionMode(QListBox::Extended)
  end

  def callback3
    @l.setSelectionMode(QListBox::Multi)
  end

  def callback4
    @l.setSelectionMode(QListBox::NoSelection)
  end

  def run
    Qt2::connect(@rb1, QSIGNAL('clicked()'), self, 'callback1')
    Qt2::connect(@rb2, QSIGNAL('clicked()'), self, 'callback2')
    Qt2::connect(@rb3, QSIGNAL('clicked()'), self, 'callback3')
    Qt2::connect(@rb4, QSIGNAL('clicked()'), self, 'callback4')

    @vbox.show()
    @a.exec()
  end
end

ListBoxDemo.new.run

リストボックスを使用不可にする

スクロールバーを付ける

先頭に表示される項目を設定する

multi column なリストボックスを作る

ComboBox クラス

ComboBox クラスを使用する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)

cb = QComboBox.new(nil)
for i in 0..10
  cb.insertItem("item #{i}")
end

a.setMainWidget( cb )
cb.show()
a.exec()

入力可能なComboBox クラスを使用する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)

cb = QComboBox.new(true, nil)
for i in 0..10
  cb.insertItem("item #{i}")
end

a.setMainWidget( cb )
cb.show()
a.exec()

項目を追加する

require "qt2"
include Qt2

class ComboBoxDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @cb = QComboBox.new(@vbox)
    @b = QPushButton.new("insert", @vbox)

    @i = 1
  end

  def callback
    @cb.insertItem("item #{@i}")
    @i += 1
  end

  def run
    Qt2::connect(@b, QSIGNAL('clicked()'), self, 'callback')

    @vbox.show()
    @a.exec()
  end
end

ComboBoxDemo.new.run

項目を削除する

全項目を削除する

require "qt2"
include Qt2

class ComboBoxDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @cb = QComboBox.new(@vbox)
    @b1 = QPushButton.new("insert", @vbox)
    @b2 = QPushButton.new("clear", @vbox)

    @i = 1
  end

  def callback1
    @cb.insertItem("item #{@i}")
    @i += 1
  end

  def callback2
    @cb.clear
  end

  def run
    Qt2::connect(@b1, QSIGNAL('clicked()'), self, 'callback1')
    Qt2::connect(@b2, QSIGNAL('clicked()'), self, 'callback2')

    @vbox.show()
    @a.exec()
  end
end

ComboBoxDemo.new.run

項目数を取得する

require "qt2"
include Qt2

class ComboBoxDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @cb = QComboBox.new(@vbox)
    @b1 = QPushButton.new("insert", @vbox)
    @b2 = QPushButton.new("number", @vbox)

    @i = 1
  end

  def callback1
    @cb.insertItem("item #{@i}")
    @i += 1
  end

  def callback2
    print "#{@cb.count}\n"
  end

  def run
    Qt2::connect(@b1, QSIGNAL('clicked()'), self, 'callback1')
    Qt2::connect(@b2, QSIGNAL('clicked()'), self, 'callback2')

    @vbox.show()
    @a.exec()
  end
end

ComboBoxDemo.new.run

選択された項目を取得する

require "qt2"
include Qt2

class ComboBoxDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @cb = QComboBox.new(@vbox)
    @b = QPushButton.new("text", @vbox)

    for i in 0..10
      @cb.insertItem("item #{i}")
    end
  end

  def callback
    print "currentText: #{@cb.currentText.to_str}  currentItem: #{@cb.currentItem}\n"
  end

  def run
    Qt2::connect(@b, QSIGNAL('clicked()'), self, 'callback')

    @vbox.show()
    @a.exec()
  end
end

ComboBoxDemo.new.run

Listview クラス

Listview クラスを使用する

Slider クラス

Slider クラスを使用する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
s = QSlider.new(nil)
s.setRange(0, 100)
s.setValue(0)

a.setMainWidget( s )
s.show()
a.exec()

水平のスケールを使用する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
s = QSlider.new(nil)
#s.setOrientation(QSlider::Vertical)
s.setOrientation(QSlider::Horizontal)
s.setRange(0, 100)
s.setValue(0)

a.setMainWidget( s )
s.show()
a.exec()

現在の値を取得する

値を変更する

軸を表示するかどうかを変える

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
s = QSlider.new(nil)
s.setRange(0, 100)
s.setValue(0)
s.setTickmarks(QSlider::NoMarks)
s.setTickmarks(QSlider::Left)
s.setTickmarks(QSlider::Right)
s.setTickmarks(QSlider::Both)

#s.setOrientation(QSlider::Horizontal)
#s.setTickmarks(QSlider::Below)
#s.setTickmarks(QSlider::Above)

a.setMainWidget( s )
s.show()
a.exec()

現在の値を表示するかどうかを変える

スケールの移動単位を設定する

SpinBox クラス

SpinBox クラスを使用する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
s = QSpinBox.new(nil)
s.setRange(0, 10)
s.setValue(0)

a.setMainWidget( s )
s.show()
a.exec()

値を取得する

require "qt2"
include Qt2

class SpinBoxDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @s = QSpinBox.new(@vbox)
    @s.setRange(0, 10)
    @s.setValue(0)

    @b = QPushButton.new("value", @vbox)
  end

  def callback
    print "#{@s.text.to_str}\n"
  end

  def run
    Qt2::connect(@b, QSIGNAL('clicked()'), self, 'callback')

    @vbox.show()
    @a.exec()
  end
end

SpinBoxDemo.new.run

値をクリアする

上限、下限を設定する

値が循環するようにする

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
s = QSpinBox.new(nil)
s.setRange(0, 10)
s.setValue(0)
s.setWrapping(true)

a.setMainWidget( s )
s.show()
a.exec()

最低値のときに表示する文字列を指定する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
s = QSpinBox.new(nil)
s.setRange(-1, 10)
s.setValue(0)
s. setSpecialValueText("Min!")

a.setMainWidget( s )
s.show()
a.exec()

数値の前や後ろに付ける文字列を設定する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
s = QSpinBox.new(nil)
s.setRange(0, 10)
s.setValue(0)
s.setPrefix("Item ")
s.setSuffix(" Points")

a.setMainWidget( s )
s.show()
a.exec()

増分を設定する

ProgressBar クラス

ProgressBar クラスを使用する

require "qt2"
include Qt2

class ProgressBarDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @a.setMainWidget(@vbox)

    @pb = QProgressBar.new(@vbox)
    @s = QSlider.new(@vbox)
    @s.setOrientation(QSlider::Horizontal)
  end

  def sliderValueChanged(value)
     @pb.setProgress(value)
  end

  def run
    Qt2::connect(@s, QSIGNAL('valueChanged(int)'), self, 'sliderValueChanged')

    @vbox.show()
    @a.exec()
  end
end

ProgressBarDemo.new.run

リセットする

Painter クラス

線を描画する

多角形を描画する

四角を描画する

角の丸い四角を描画する

円を描画する

楕円を描画する

扇形を描画する

円弧を描画する

ベジェ曲線を描画する

テキストを描画する

図形の中身を塗りつぶす

図形の色を変更する

Canvas クラス

Menu

チェックボタンメニューを作る

ラジオボタンメニューを作る

カスケードメニューを作る

セパレータを使う

イメージを使用する

ポップアップメニューを作る

ショートカットキーを設定する

メニューの項目を使用不可にする

ヘルプメニューのみ右端に付けるようにする

ダイアログ

ダイアログボックスを表示する

メッセージボックスを表示する

#!/usr/bin/env ruby

require "qt2"
include Qt2

class DialogDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @vbox = QVBox.new
    @vbox.setMargin(10)
    @b1 = QPushButton.new("information Dialog", @vbox)
    @b2 = QPushButton.new("warning Dialog", @vbox)
    @b3 = QPushButton.new("critical Dialog", @vbox)
    @b4 = QPushButton.new("about Dialog", @vbox)
    @b5 = QPushButton.new("aboutQt Dialog", @vbox)
  end

  def callback1
    QMessageBox::information(@vbox, "title", "contents", QMessageBox::Ok)
  end

  def callback2
    QMessageBox::warning(@vbox, "title", "contents", QMessageBox::Ok, QMessageBox::No)
  end

  def callback3
    QMessageBox::critical(@vbox, "title", "contents",
                          QMessageBox::Yes, QMessageBox::No, QMessageBox::Cancel)
  end

  def callback4
    QMessageBox::about(@vbox, "title", "contents")
  end

  def callback5
    QMessageBox::aboutQt(@vbox, "title")
  end

  def run
    Qt2::connect(@b1, QSIGNAL('clicked()'), self, 'callback1')
    Qt2::connect(@b2, QSIGNAL('clicked()'), self, 'callback2')
    Qt2::connect(@b3, QSIGNAL('clicked()'), self, 'callback3')
    Qt2::connect(@b4, QSIGNAL('clicked()'), self, 'callback4')
    Qt2::connect(@b5, QSIGNAL('clicked()'), self, 'callback5')

    @a.setMainWidget(@vbox)
    @vbox.show()
    @a.exec()
  end
end

DialogDemo.new.run

独自のダイアログを作成する

ファイル選択のダイアログを表示する

カラー選択のダイアログを表示する

プログレスダイアログを表示する

タブダイアログを使用する

イメージ

イメージを表示する

イメージを保存する

GIFアニメーションを表示する

その他

プログラムを終了する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
quit = QPushButton.new( "Quit", nil )
Qt2::connect( quit, QSIGNAL("clicked()"), a, "quit" )

a.setMainWidget( quit )
quit.show()
a.exec()

ウィンドウマネージャーのクローズボタンを押したときにすぐにプログラムを終了しない

タイトルを設定する

require "qt2"
include Qt2

title = "Hello world!"

a = QApplication.new([title]+ARGV)
hello = QLabel.new( "Hello world!", nil )
hello.resize( 200, 120 )

a.setMainWidget( hello )
hello.show()
a.exec()

アイコンを設定する

アイコン化されたときに表示される文字列を設定する

新しいウィンドウを生成する

ウィンドウを消去する

ウィンドウを非表示にする

ウィンドウの表示位置を指定する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
hello = QLabel.new( "Hello world!", nil )
hello.setGeometry( 100, 400, 200, 100 )
hello.setAlignment(Qt::AlignCenter)

a.setMainWidget( hello )
hello.show()
a.exec()

とか

require "qt2"
include Qt2

class MyMainWindow < QWidget
  def initialize
    setGeometry( 100, 100, 200, 100 )

    hello = QLabel.new( "Hello world!", self )
    #hello.setGeometry( 100, 50, 200, 100 )
    hello.setAlignment(Qt::AlignCenter)
  end
end

a = QApplication.new([$0]+ARGV)
w = MyMainWindow.new

a.setMainWidget( w )
w.show()
a.exec()

とか

画面中央にウィンドウを表示する

ウィンドウを移動する

画面の大きさを取得する

ウィンドウの大きさを固定する

モーダルウィンドウを作成する

ベルを鳴らす

require "qt2"
include Qt2

class BellDemo < QObject
  def initialize
    @a = QApplication.new([$0]+ARGV)
    @b = QPushButton.new("bell", nil)
  end

  def callback
    QApplication.beep
  end

  def run
    Qt2::connect(@b, QSIGNAL('clicked()'), self, 'callback')

    @a.setMainWidget( @b )
    @b.show()
    @a.exec()
  end
end

BellDemo.new.run

ウィンドウがアクティブのとき特定の Widget にフォーカスを移動する

日本語を表示する

require "qt2"
include Qt2

a = QApplication.new([$0]+ARGV)
codec = QTextCodec::codecForLocale()
a.setDefaultCodec(codec)

hello = QLabel.new( tr("こんにちは"), nil )

a.setMainWidget( hello )
hello.show()
a.exec()

タイマー機能を使用する