- ウィンドウ上で好きなメッセージを表示させてみましょう。
- ソースコードは utf-8 前提です。
- 動作確認環境 : Ruby 1.8.4 + rubyqte 0.5.3
ラベルを最小限の記述で配置してみる
以下のコードが基本になります。「ウィンドウを開く」の「クラスにする」のコードを少しだけ変更した物で、12行目に注目です。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| | require 'qte'
require 'qpe'
include Qte
include Qpe
class MainWindow < QMainWindow
def initialize
super
self.setCaption(tr("(6) QLabel さんぷる"))
@mylabel = QLabel.new(tr("ラベルのテスト"), self)
end
end
class MyApplication < QPEApplication
def initialize
super([$0]+ARGV)
self.setDefaultCodec(QTextCodec::codecForName("utf-8"))
end
end
app = MyApplication.new
win = MainWindow.new()
app.showMainWidget(win)
app.exec
|
12行目は、以下の書式になっています。
| @mylabel = QLabel.new(tr("ラベルのテスト"), self)
|
- @mylabel
- MainWindow クラスのインスタンス変数です。
- 新しく作ったラベルについていろいろ設定変更などをしたくなったら、@mylabel.メソッド名 のようにします。
- QLabel.new()
- 新しいラベルを作成します。引数が詳細オプションです。
- 第1引数がラベルに表示する文字列、第2引数が親となるウィンドウ(この場合は self = MainWindow そのもの、です)
- tr("ラベルのテスト")
- そのままの文字列を渡しても文字化けするため、tr() で Qte でも解釈できる形式に変換してあげています。
- 「\n」を割り込ませることにより、複数行にわたる文章も表示させることができます。
さて、このスクリプトを実行すると、どうなるでしょう?...ウィンドウ左上に「ラベルのテ」と表示されていますね。これは、規定値のままではラベルは座標 0,0 (タイトル部分除く) で、幅 100 ピクセル(101ピクセルより右側は欠けてしまう) として配置されてしまうことから、このような挙動になると考えられます。
ラベルのサイズを変える
サイズを変えるには、.resize(幅,高さ) または .setFixedWidth(幅) というメソッドを使います。
下のようにコードを修正すれば、「ラベルのテ」が「ラベルのテスト」とちゃんと表示されるようになるでしょう。
| @mylabel = QLabel.new(tr("ラベルのテスト"), self)
@mylabel.resize(200,20)
|
ラベルの配置位置を変える
ラベルの位置を変えるには .move(X座標,Y座標) というメソッドを使います。
| @mylabel = QLabel.new(tr("ラベルのテスト"), self)
@mylabel.move(320,320)
|
ラベルの書式設定を触ってみる
.setAlignment(書式) というメソッドを使うことで、センタリングなどに整形することができます。
| @mylabel = QLabel.new(tr("ラベルのテスト"), self)
@mylabel.resize(640,100)
@mylabel.setAlignment(Qt::AlignCenter)
|
Qt::AlignCenter 部分には、ほかにも左寄せ(Qt::AlignLeft)、右寄せ(Qt::AlignRight)、左寄せで上端に寄せる(Qt::AlignTop)、左寄せで下端に寄せる(Qt::AlignBottom)指定を行えます。
フォントの変更は .setFont(QFont.new(フォント名,サイズ)) というメソッドで行います。フォント名やサイズはいろいろ試してみてください。ありえないフォント名やサイズを指定すると、とても小さなフォントが代替で使われるようです。
| @mylabel = QLabel.new(tr("ラベルのテスト"), self)
@mylabel.resize(640,100)
@mylabel.setFont(QFont.new("lcfont",48))
|
ラベルの文章を書き換える
.setText(tr(書き換えたい文章)) あるいは .setNum(数字) というメソッドを使います。
ラベルの中身を空っぽにしたい場合は .clear メソッドを使うこともできます。
| @mylabel = QLabel.new(tr("ラベルのテスト"), self)
@mylabel.setText(tr("書き換えたよ\n(^^)v")) @mylabel.setNum(12345) @mylabel.clear
|
ラベルの中身を Ruby でも扱える文字列にする
ラベルの中身は .text メソッドで取り出すことが出来ます。ただし、.text で取り出せるのは Qte::QString という Qt 独自の文字列で、そのままでは取り扱いできません。
| @mylabel = QLabel.new(tr("ラベルのテスト"), self)
puts @mylabel.text
|
そこで、.text の後ろに .local8Bit.to_str をつけてあげます。つまり、.text.local8Bit.to_str とすれば、utf-8 形式の文字列 (String 型)が取得できます。
端末ウィンドウ上にメッセージを出したい場合は、nkf か kconv を require して、EUC コードに変換して出力してあげるといいでしょう。
| @mylabel = QLabel.new(tr("ラベルのテスト"), self)
puts @mylabel.text.local8Bit.to_str.toeuc
|