- 配置を自在にコントロールする基本、QVBox, QHBox について。
- ソースコードは utf-8 前提です。
- 動作確認環境 : Ruby 1.8.4 + rubyqte 0.5.3
直接ラベルなどを配置する場合の問題点
以下のコードはラベルを5つ配置するコードですが、「ラベル1」~「ラベル5」がすべて同一座標上に生成されてしまうので、「ラベル5」しか表示されない問題があります。
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
26
27
28
29
| | require 'qte'
require 'qpe'
include Qte
include Qpe
class MainWindow < QMainWindow
def initialize
super
self.setCaption(tr("(7) QxBox さんぷる"))
@mylabel1 = QLabel.new(tr("ラベル1"), self)
@mylabel2 = QLabel.new(tr("ラベル2"), self)
@mylabel3 = QLabel.new(tr("ラベル3"), self)
@mylabel4 = QLabel.new(tr("ラベル4"), self)
@mylabel5 = QLabel.new(tr("ラベル5"), 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
|
縦方向に並べる QVBox
QVBox を使うことにより、ウィンドウを縦複数行に均等に分割してウィジェット(ラベルやボタンなどのGUI部品のことです)を配置できます。
ポイントは QLabel.new の第2引数が QVBox 型の @mybox になっていることでしょう。
| self.setCaption(tr("(7) QxBox さんぷる"))
@mybox = QVBox.new(self)
self.setCentralWidget(@mybox) @mylabel1 = QLabel.new(tr("ラベル1"), @mybox)
@mylabel2 = QLabel.new(tr("ラベル2"), @mybox)
@mylabel3 = QLabel.new(tr("ラベル3"), @mybox)
@mylabel4 = QLabel.new(tr("ラベル4"), @mybox)
@mylabel5 = QLabel.new(tr("ラベル5"), @mybox)
|
横方向に並べる QHBox
基本的には QVBox と同じです。QHBox の場合は、ウィンドウを横に均等に分割してウィジェットを配置となります。QVBox の部分を QHBox に置換して、試してみてください。
QVBox と QHBox を組み合わせる
QVBox や QHBox は組み合わせることも出来ます。QVBox.new(親ウィジェット) / QHBox.new(親ウィジェット) の親ウィジェットを別の QVBox / QHBox にすることで、縦横組み合わせの配置を設定することができます。
以下のコードは @mybox の中に @mybox_child というボックスを配置した例です。
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
26
27
28
29
30
31
32
33
| | require 'qte'
require 'qpe'
include Qte
include Qpe
class MainWindow < QMainWindow
def initialize
super
self.setCaption(tr("(7) QxBox さんぷる"))
@mybox = QHBox.new(self)
self.setCentralWidget(@mybox)
@mybox_child = QVBox.new(@mybox)
@mybtn1 = QPushButton.new(tr("ボタン1"), @mybox_child)
@mylabel1 = QLabel.new(tr("ラベル1"), @mybox_child)
@mylabel2 = QLabel.new(tr("ラベル2"), @mybox_child)
@mylabel3 = QLabel.new(tr("ラベル3"), @mybox)
@mylabel4 = QLabel.new(tr("ラベル4"), @mybox)
@mylabel5 = QLabel.new(tr("ラベル5"), @mybox)
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
|