Top > Ruby > Qte > QLabel
  • ウィンドウ上で好きなメッセージを表示させてみましょう。
  • ソースコードは 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
#!/usr/bin/env ruby
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ピクセルより右側は欠けてしまう) として配置されてしまうことから、このような挙動になると考えられます。

QLabel_Default.png

ラベルのサイズを変える

サイズを変えるには、.resize(幅,高さ) または .setFixedWidth(幅) というメソッドを使います。

下のようにコードを修正すれば、「ラベルのテ」が「ラベルのテスト」とちゃんと表示されるようになるでしょう。

@mylabel = QLabel.new(tr("ラベルのテスト"), self)
@mylabel.resize(200,20) # @mylabel.setFixedWidth(200) に置き換えることも可。

ラベルの配置位置を変える

ラベルの位置を変えるには .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"))  #=> 書き換えたよ[改行](^^)v
@mylabel.setNum(12345)                      #=> 12345
@mylabel.clear                              #=> (ラベルが空になる)

ラベルの中身を Ruby でも扱える文字列にする

 ラベルの中身は .text メソッドで取り出すことが出来ます。ただし、.text で取り出せるのは Qte::QString という Qt 独自の文字列で、そのままでは取り扱いできません。

@mylabel = QLabel.new(tr("ラベルのテスト"), self)
puts @mylabel.text  #=> #<Qte::QString:0xnnnnnnnn> (n = オブジェクトの場所)

そこで、.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  #=> ラベルのテスト  (kconv を使った例)

添付ファイル: fileQLabel_Default.png 599件 [詳細]

リロード   新規 下位ページ作成 凍結解除 差分 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Fri, 22 Jul 2011 21:57:55 JST (1525d)