Development/Tutorials/Qt4 Ruby Tutorial/Chapter 06: Difference between revisions
Neverendingo (talk | contribs) m (Text replace - "</code>" to "</syntaxhighlight>") |
Aspotashev (talk | contribs) (add translate tags) |
||
Line 1: | Line 1: | ||
<languages /> | |||
{{Template:I18n/Language Navigation Bar|Development/Tutorials/Qt4 Ruby Tutorial/Chapter 06}} | {{Template:I18n/Language Navigation Bar|Development/Tutorials/Qt4 Ruby Tutorial/Chapter 06}} | ||
{{TutorialBrowser| | {{<translate>TutorialBrowser</translate>| | ||
series=[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial|<translate>Qt4 Ruby Tutorial</translate>]]| | |||
series=[[Development/Tutorials/Qt4_Ruby_Tutorial|Qt4 Ruby Tutorial]]| | name=<translate>Building Blocks Galore!</translate>| | ||
pre=[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_05|<translate>Tutorial 5 - Building Blocks</translate>]]| | |||
name=Building Blocks Galore! | | next=[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_07|<translate>Tutorial 7 - One Thing Leads to Another</translate>]] | ||
pre=[[Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_05|Tutorial 5 - Building Blocks]]| | |||
next=[[Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_07|Tutorial 7 - One Thing Leads to Another]] | |||
}} | }} | ||
<translate> | |||
== Building Blocks Galore! == | == Building Blocks Galore! == | ||
</translate> | |||
<translate> | |||
[[Image:Qt4_Ruby_Tutorial_Screenshot_6.png|center]] | [[Image:Qt4_Ruby_Tutorial_Screenshot_6.png|center]] | ||
</translate> | |||
<translate> | |||
Files: | Files: | ||
* [http://www.darshancomputing.com/qt4-qtruby-tutorial/tutorial/t6/t6.rb t6.rb] | * [http://www.darshancomputing.com/qt4-qtruby-tutorial/tutorial/t6/t6.rb t6.rb] | ||
</translate> | |||
<translate> | |||
=== Overview === | === Overview === | ||
This example shows how to encapsulate two widgets into a new component and how easy it is to use many widgets. For the first time, we use a custom widget as a child widget. | This example shows how to encapsulate two widgets into a new component and how easy it is to use many widgets. For the first time, we use a custom widget as a child widget. | ||
</translate> | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 70: | Line 78: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<translate> | |||
=== Line by Line Walkthrough === | === Line by Line Walkthrough === | ||
</translate> | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
class LCDRange < Qt::Widget | class LCDRange < Qt::Widget | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<translate> | |||
The '''<tt>LCDRange</tt>''' widget is a widget without any API. It just has a constructor. This sort of widget is not very useful, so we'll add some API later. | The '''<tt>LCDRange</tt>''' widget is a widget without any API. It just has a constructor. This sort of widget is not very useful, so we'll add some API later. | ||
</translate> | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 94: | Line 106: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<translate> | |||
This is lifted straight from the '''<tt>MyWidget</tt>''' constructor in Chapter 5. The only differences are that the <strong>Quit</strong> button is left out and the class is renamed. | This is lifted straight from the '''<tt>MyWidget</tt>''' constructor in Chapter 5. The only differences are that the <strong>Quit</strong> button is left out and the class is renamed. | ||
</translate> | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 100: | Line 114: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<translate> | |||
'''<tt>MyWidget</tt>''', too, contains no API except a constructor. | '''<tt>MyWidget</tt>''', too, contains no API except a constructor. | ||
</translate> | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 110: | Line 126: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<translate> | |||
The push button that used to be in what is now '''<tt>LCDRange</tt>''' has been separated so that we can have one <strong>Quit</strong> button and many '''<tt>LCDRange</tt>''' objects. | The push button that used to be in what is now '''<tt>LCDRange</tt>''' has been separated so that we can have one <strong>Quit</strong> button and many '''<tt>LCDRange</tt>''' objects. | ||
</translate> | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 116: | Line 134: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<translate> | |||
We create a [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget] with a [http://doc.qt.nokia.com/latest/qgridlayout.html Qt::GridLayout] that will contain three columns. The [http://doc.qt.nokia.com/latest/qgridlayout.html Qt::GridLayout] automatically arranges its widgets in rows and columns; you can specify the row and column numbers when adding widgets to the layout, and [http://doc.qt.nokia.com/latest/qgridlayout.html Qt::GridLayout] will fit them into the grid. | We create a [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget] with a [http://doc.qt.nokia.com/latest/qgridlayout.html Qt::GridLayout] that will contain three columns. The [http://doc.qt.nokia.com/latest/qgridlayout.html Qt::GridLayout] automatically arranges its widgets in rows and columns; you can specify the row and column numbers when adding widgets to the layout, and [http://doc.qt.nokia.com/latest/qgridlayout.html Qt::GridLayout] will fit them into the grid. | ||
</translate> | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 126: | Line 146: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<translate> | |||
We create nine '''<tt>LCDRange</tt>''' widgets, all of which are children of the grid object, and we arrange them in three rows and three columns. | We create nine '''<tt>LCDRange</tt>''' widgets, all of which are children of the grid object, and we arrange them in three rows and three columns. | ||
</translate> | |||
<translate> | |||
=== Running the Application === | === Running the Application === | ||
This program shows how easy it is to use many widgets at a time. Each one behaves like the slider and LCD number in the previous chapter. Again, the difference lies in the implementation. | This program shows how easy it is to use many widgets at a time. Each one behaves like the slider and LCD number in the previous chapter. Again, the difference lies in the implementation. | ||
=== Exercises === | === Exercises === | ||
Initialize each slider with a different/random value on startup. | Initialize each slider with a different/random value on startup. | ||
[[Category:Ruby]] | [[Category:Ruby]] | ||
</translate> |
Revision as of 23:23, 1 July 2011
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 06
Languages: عربي | Asturianu | Català | Česky | Kaszëbsczi | Dansk | Deutsch | English | Esperanto | Español | Eesti | فارسی | Suomi | Français | Galego | Italiano | 日本語 | 한국어 | Norwegian | Polski | Português Brasileiro | Română | Русский | Svenska | Slovenčina | Slovenščina | српски | Türkçe | Tiếng Việt | Українська | 简体中文 | 繁體中文
Tutorial Series | Qt4 Ruby Tutorial |
Previous | Tutorial 5 - Building Blocks |
What's Next | Tutorial 7 - One Thing Leads to Another |
Further Reading | n/a |
Building Blocks Galore!
Files:
Overview
This example shows how to encapsulate two widgets into a new component and how easy it is to use many widgets. For the first time, we use a custom widget as a child widget.
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()
Line by Line Walkthrough
class LCDRange < Qt::Widget
The LCDRange widget is a widget without any API. It just has a constructor. This sort of widget is not very useful, so we'll add some API later.
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
This is lifted straight from the MyWidget constructor in Chapter 5. The only differences are that the Quit button is left out and the class is renamed.
class MyWidget < Qt::Widget
MyWidget, too, contains no API except a constructor.
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()'))
The push button that used to be in what is now LCDRange has been separated so that we can have one Quit button and many LCDRange objects.
grid = Qt::GridLayout.new()
We create a Qt::Widget with a Qt::GridLayout that will contain three columns. The Qt::GridLayout automatically arranges its widgets in rows and columns; you can specify the row and column numbers when adding widgets to the layout, and Qt::GridLayout will fit them into the grid.
for row in 0..2
for column in 0..2
grid.addWidget(LCDRange.new(), row, column)
end
end
We create nine LCDRange widgets, all of which are children of the grid object, and we arrange them in three rows and three columns.
Running the Application
This program shows how easy it is to use many widgets at a time. Each one behaves like the slider and LCD number in the previous chapter. Again, the difference lies in the implementation.
Exercises
Initialize each slider with a different/random value on startup.