StupidBeauty
Read times:780Posted at:Thu Jan 23 18:49:04 2014
- no title specified

Qt®4的Ruby教程翻译:第6章:大量地构建块!,Chapter 6: Building Blocks Galore!

Screenshot: Building Blocks Galore!Screenshot: Building Blocks Galore!


文件:

概述

这个示例,演示的是,如何将两个部件封装成一个新的组件,以及,同时使用狠多个部件是如何的容易。现在,我们第一次使用一个自定义部件作为子代部件。

require 'Qt4'

class LCDRange < Qt::Widget

def initialize(parent = nil)

super()

lcd = Qt::LCDNumber.new(2)

slider = Qt::Slider.new(Qt::Horizontal)

slider.setRange(0, 99)

slider.setValue(0)

connect(slider, SIGNAL('valueChanged(int)'), lcd, SLOT('display(int)'))

layout = Qt::VBoxLayout.new()

layout.addWidget(lcd)

layout.addWidget(slider)

setLayout(layout)

end

end

class MyWidget < Qt::Widget

def initialize(parent = nil)

super()

quit = Qt::PushButton.new(tr('Quit'))

quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))

connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()'))

grid = Qt::GridLayout.new()

for row in 0..2

for column in 0..2

grid.addWidget(LCDRange.new(), row, column)

end

end

layout = Qt::VBoxLayout.new()

layout.addWidget(quit)

layout.addLayout(grid)

setLayout(layout)

end

end

app = Qt::Application.new(ARGV)

widget = MyWidget.new()

widget.show()

app.exec()

一行行地研究

class LCDRange < Qt::Widget

LCDRange部件是一个不带任何编程接口的部件。它只拥有一个构造函数。这种部件并没有多大用处,所以我们日后将给它加入一些接口。

def initialize(parent = nil)

super()

lcd = Qt::LCDNumber.new(2)

slider = Qt::Slider.new(Qt::Horizontal)

slider.setRange(0, 99)

slider.setValue(0)

connect(slider, SIGNAL('valueChanged(int)'), lcd, SLOT('display(int)'))

layout = Qt::VBoxLayout.new()

layout.addWidget(lcd)

layout.addWidget(slider)

setLayout(layout)

end

这段代码是直接从第5章的 MyWidget 构造函数中山寨过来的。唯一的不同就是, Quit这个按钮没有被包含进来,并且这个类已经重命名了。

class MyWidget < Qt::Widget

MyWidget,同样地,不包含编程接口,只有一个构造函数。

def initialize(parent = nil)

super()

quit = Qt::PushButton.new(tr('Quit'))

quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))

connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()'))

LCDRange 的前身类中所包含的那个按钮现在已经单独拿出来了,这样我们就可以放置一个Quit按钮和狠多个LCDRange对象。

grid = Qt::GridLayout.new()

我们创建一个Qt::Widget,其中有一个Qt::GridLayout,它包含了三列内容。Qt::GridLayout会自动在行和列中放置它的各个部件;当妳向布局中加入部件时,可以指定行号和列号,Qt::GridLayout会在网格中自动放置它们。

for row in 0..2

for column in 0..2

grid.addWidget(LCDRange.new(), row, column)

end

end

我们创建了9个 LCDRange部件,它们都是网格对象的子代部件,然后将它们放置在3行和3列中。

运行程序

这个程序演示的是同时使用狠多个部件是如何的容易。其中的每一个的行为都像前一章中的滑动器和液晶显示器数字部件一样。再次说明,不同之处就在于它们的实现代码。

练习

在启动时,给每个滑动器设置一个不同值/随机值。

[下一篇: 7章 ]

未知美人

未知美人

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands