Development/Tutorials/Qt4 Ruby Tutorial/Chapter 10/fi: Difference between revisions
Centerlink (talk | contribs) (Created page with "Oppikurssi 11 - Annetaan sille laukaus") |
(Updating to match new version of source page) |
||
(23 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
<languages /> | <languages /> | ||
{{TutorialBrowser| | {{TutorialBrowser| | ||
Line 9: | Line 8: | ||
next=[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_11|Oppikurssi 11 - Annetaan sille laukaus]] | next=[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_11|Oppikurssi 11 - Annetaan sille laukaus]] | ||
}} | }} | ||
== | == Sileää kuin silkki == | ||
[[Image:Qt4_Ruby_Tutorial_Screenshot_10.png|center]] | [[Image:Qt4_Ruby_Tutorial_Screenshot_10.png|center]] | ||
Tiedostot: | |||
* [http://www.darshancomputing.com/qt4-qtruby-tutorial/tutorial/t10/lcdrange.rb lcdrange.rb] | * [http://www.darshancomputing.com/qt4-qtruby-tutorial/tutorial/t10/lcdrange.rb lcdrange.rb] | ||
* [http://www.darshancomputing.com/qt4-qtruby-tutorial/tutorial/t10/t10.rb t10.rb] | * [http://www.darshancomputing.com/qt4-qtruby-tutorial/tutorial/t10/t10.rb t10.rb] | ||
* [http://www.darshancomputing.com/qt4-qtruby-tutorial/tutorial/t10/cannon.rb cannon.rb] | * [http://www.darshancomputing.com/qt4-qtruby-tutorial/tutorial/t10/cannon.rb cannon.rb] | ||
=== | === Yleiskuva === | ||
Tässä esimerkissä lisäämme voimaa ohjaimeen. | |||
=== | === Läpikäynti rivi riviltä === | ||
'''[http://www.darshancomputing.com/qt4-qtruby-tutorial/tutorial/t10/cannon.rb cannon.rb]''' | '''[http://www.darshancomputing.com/qt4-qtruby-tutorial/tutorial/t10/cannon.rb cannon.rb]''' | ||
Kentällä '''<tt>CannonField</tt>''' on nyt voima-arvo kulman lisäksi. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 30: | Line 29: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Voiman rajapinta noudattaa samaa käytäntöä kuin kulma. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 44: | Line 43: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Voima '''<tt>@currentForce</tt>''' on alustettu nollaksi. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 64: | Line 63: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Teimme pienen muutoksen '''<tt>setAngle()</tt>'''-funktioon. Se piirtää uudelleen käyttöliittymän osan, joka sisältää kanuunan. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 80: | Line 79: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
'''<tt>setForce()</tt>'''-toteutus on aika samanlainen kuin '''<tt>setAngle()</tt>'''. Ainoa erilaisuus on, että koska emme näytä voima-arvoa, käyttöliittymäkomponenttia ei tarvitse piirtää uudelleen. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 97: | Line 96: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Piirrämme kuin kappaleessa 9. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 107: | Line 106: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Funktio '''<tt>cannonRect()</tt>''' palauttaa nelikulmion, joka sisältää kanuunan sisältävän käyttöliittymäkomponentin. Luomme aluksi nelikulmion, jonka koko on 50 x 50 ja siirrämme sen niin, että sen vasen alakulma on sama kuin käyttöliittymäkomponentin vasen alakulma. | |||
Funktio [http://doc.qt.nokia.com/latest/qwidget.html#rect-prop Qt::Widget::rect()] palauttaa käyttöliittymän sisältämän nelikulmion käyttöliittymän omina koordinaatteina. Nelikulmion vasen yläkulma on aina (0, 0). | |||
'''[http://www.darshancomputing.com/qt4-qtruby-tutorial/tutorial/t10/t10.rb t10.rb]''' | '''[http://www.darshancomputing.com/qt4-qtruby-tutorial/tutorial/t10/t10.rb t10.rb]''' | ||
Konstruktori on enimmäkseen sama, mutta joitakin uusia bittejä on lisätty. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 120: | Line 119: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Lisäämme toisen '''<tt>LCDRange</tt>'''-komponentin, jota käytetään voiman asettamiseen. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 129: | Line 128: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Yhdistämme käyttöliittymäkomponentin '''<tt>force</tt>''' ja käyttöliittymäkomponentin '''<tt>cannonField</tt>''', aivan kuin teimme käyttöliittymäkomponentille '''<tt>angle</tt>'''. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 143: | Line 142: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Kappaleessa 9 sijoitamme '''<tt>angle</tt>'''-komponentin asettelun vasemman alakulman soluun. Nyt haluamme siihen soluun kaksi käyttöliittymäkomponenttial, joten teemme pystysuoran ruudun, laitamme pystysuoran ruudun rasterinsoluunl, ja laitamme sekä '''<tt>angle</tt>''' että '''<tt>range</tt>''' pystysuoraan ruutuun. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 149: | Line 148: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Alustamme voima-arvoksi 25. | |||
=== | === Sovelluksen suorittaminen === | ||
Meillä on nyt voimaohjaus. | |||
=== | === Harjoitukset === | ||
Tee kanuuna piipun koko riippuvaiseksi voimasta. | |||
Laita kanuuna oikeaan alakulmaan. | |||
Yritä lisätä parempi näppäimistörajapinta. Esimerkiksi, tee + ja - kasvattamaan ja pienennättämään voimaa ja laukaisemaan kanuunan. Jos olet vaivautunut tavasta, jolla näppäimet '''<tt>Left</tt>''' ja '''<tt>Right</tt>''' toimivat, muuta sitä myös. [Vihje: Toteuta uudelleen [http://doc.qt.nokia.com/latest/qwidget.html#keyPressEvent Qt::Widget::keyPressEvent()].] | |||
[[Category:Ruby]] | [[Category:Ruby]] |
Latest revision as of 14:24, 18 July 2012
Tutorial Series | Qt4 Ruby -oppikurssi |
Previous | Oppikurssi 9 - Kanuunalla onnistuu |
What's Next | Oppikurssi 11 - Annetaan sille laukaus |
Further Reading | n/a |
Sileää kuin silkki
Tiedostot:
Yleiskuva
Tässä esimerkissä lisäämme voimaa ohjaimeen.
Läpikäynti rivi riviltä
Kentällä CannonField on nyt voima-arvo kulman lisäksi.
signals 'angleChanged(int)', 'forceChanged(int)'
slots 'setAngle(int)', 'setForce(int)'
Voiman rajapinta noudattaa samaa käytäntöä kuin kulma.
def initialize(parent = nil)
super()
@currentAngle = 45
@currentForce = 0
setPalette(Qt::Palette.new(Qt::Color.new(250, 250, 200)))
setAutoFillBackground(true)
end
Voima @currentForce on alustettu nollaksi.
def setAngle(angle)
if angle < 5
angle = 5
elsif angle > 70
angle = 70
end
if @currentAngle == angle
return
end
@currentAngle = angle
update(cannonRect())
emit angleChanged(@currentAngle)
end
Teimme pienen muutoksen setAngle()-funktioon. Se piirtää uudelleen käyttöliittymän osan, joka sisältää kanuunan.
def setForce(force)
if force < 0
force = 0
end
if @currentForce == force
return
end
@currentForce = force
emit forceChanged(@currentForce)
end
setForce()-toteutus on aika samanlainen kuin setAngle(). Ainoa erilaisuus on, että koska emme näytä voima-arvoa, käyttöliittymäkomponenttia ei tarvitse piirtää uudelleen.
def paintEvent(event)
painter = Qt::Painter.new(self)
painter.setPen(Qt::NoPen)
painter.setBrush(Qt::Brush.new(Qt::blue))
painter.translate(0, height())
painter.drawPie(Qt::Rect.new(-35, -35, 70, 70), 0, 90 * 16)
painter.rotate(-@currentAngle)
painter.drawRect(Qt::Rect.new(30, -5, 20, 10))
painter.end()
end
Piirrämme kuin kappaleessa 9.
def cannonRect()
result = Qt::Rect.new(0, 0, 50, 50)
result.moveBottomLeft(rect().bottomLeft())
return result
end
Funktio cannonRect() palauttaa nelikulmion, joka sisältää kanuunan sisältävän käyttöliittymäkomponentin. Luomme aluksi nelikulmion, jonka koko on 50 x 50 ja siirrämme sen niin, että sen vasen alakulma on sama kuin käyttöliittymäkomponentin vasen alakulma.
Funktio Qt::Widget::rect() palauttaa käyttöliittymän sisältämän nelikulmion käyttöliittymän omina koordinaatteina. Nelikulmion vasen yläkulma on aina (0, 0).
Konstruktori on enimmäkseen sama, mutta joitakin uusia bittejä on lisätty.
force = LCDRange.new()
force.setRange(10, 50)
Lisäämme toisen LCDRange-komponentin, jota käytetään voiman asettamiseen.
connect(force, SIGNAL('valueChanged(int)'),
cannonField, SLOT('setForce(int)'))
connect(cannonField, SIGNAL('forceChanged(int)'),
force, SLOT('setValue(int)'))
Yhdistämme käyttöliittymäkomponentin force ja käyttöliittymäkomponentin cannonField, aivan kuin teimme käyttöliittymäkomponentille angle.
leftLayout = Qt::VBoxLayout.new()
leftLayout.addWidget(angle)
leftLayout.addWidget(force)
gridLayout = Qt::GridLayout.new()
gridLayout.addWidget(quit, 0, 0)
gridLayout.addLayout(leftLayout, 1, 0)
gridLayout.addWidget(cannonField, 1, 1, 2, 1)
gridLayout.setColumnStretch(1, 10)
Kappaleessa 9 sijoitamme angle-komponentin asettelun vasemman alakulman soluun. Nyt haluamme siihen soluun kaksi käyttöliittymäkomponenttial, joten teemme pystysuoran ruudun, laitamme pystysuoran ruudun rasterinsoluunl, ja laitamme sekä angle että range pystysuoraan ruutuun.
force.setValue(25)
Alustamme voima-arvoksi 25.
Sovelluksen suorittaminen
Meillä on nyt voimaohjaus.
Harjoitukset
Tee kanuuna piipun koko riippuvaiseksi voimasta.
Laita kanuuna oikeaan alakulmaan.
Yritä lisätä parempi näppäimistörajapinta. Esimerkiksi, tee + ja - kasvattamaan ja pienennättämään voimaa ja laukaisemaan kanuunan. Jos olet vaivautunut tavasta, jolla näppäimet Left ja Right toimivat, muuta sitä myös. [Vihje: Toteuta uudelleen Qt::Widget::keyPressEvent().]