Centerlink (Talk | contribs) (Created page with "Qt4 Ruby -oppikurssi") |
(Updating to match new version of source page) |
||
| (26 intermediate revisions by one user not shown) | |||
| Line 1: | Line 1: | ||
<languages /> | <languages /> | ||
| − | |||
{{TutorialBrowser| | {{TutorialBrowser| | ||
series=[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial|Qt4 Ruby -oppikurssi]]| | series=[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial|Qt4 Ruby -oppikurssi]]| | ||
| − | name= | + | name=Sileää kuin silkki| |
| − | pre=[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_09| | + | pre=[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_09|Oppikurssi 9 - Kanuunalla onnistuu]]| |
| − | next=[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_11| | + | 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]] | ||
| Tutorial Series | Qt4 Ruby -oppikurssi |
| Previous | Oppikurssi 9 - Kanuunalla onnistuu |
| What's Next | Oppikurssi 11 - Annetaan sille laukaus |
| Further Reading | n/a |
Contents |
Tiedostot:
Tässä esimerkissä lisäämme voimaa ohjaimeen.
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.
Meillä on nyt voimaohjaus.
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().]