Development/Tutorials/Qt4 Ruby Tutorial/Chapter 04/fi: Difference between revisions
Centerlink (talk | contribs) (Created page with "Kehitys/Oppikurssit/Qt4 Ruby-oppikurssi/Kappale 4") |
(Updating to match new version of source page) |
||
(34 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
<languages /> | <languages /> | ||
{{TutorialBrowser| | {{TutorialBrowser| | ||
series=[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial|Qt4 Ruby | series=[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial|Qt4 Ruby -oppikurssi]]| | ||
name= | name=Olkoon siellä käyttöliittymäkomponentteja| | ||
pre=[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_3| | pre=[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_3|Oppikurssi 3 - Perhearvot]]| | ||
next=[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_05| | next=[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_05|Oppikurssi 5 - Lohkojen rakentaminen]] | ||
}} | }} | ||
== | == Olkoon siellä käyttöliittymäkomponentteja == | ||
[[Image:Qt4_Ruby_Tutorial_Screenshot_4.png|center]] | [[Image:Qt4_Ruby_Tutorial_Screenshot_4.png|center]] | ||
Tiedostot: | |||
* [http://www.darshancomputing.com/qt4-qtruby-tutorial/tutorial/t4/t4.rb t4.rb] | * [http://www.darshancomputing.com/qt4-qtruby-tutorial/tutorial/t4/t4.rb t4.rb] | ||
=== | === Yleiskuva === | ||
Tämä esimerkki näyttää kuinka luot oman käyttöliittymäkomponentin, ja kuvailee kuinka ohjaat käyttöliittymäkomponentin minimi- ja maksimikokoa. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 28: | Line 27: | ||
setFixedSize(200, 120) | setFixedSize(200, 120) | ||
quit = Qt::PushButton.new(tr(' | quit = Qt::PushButton.new(tr('Poistu'), self) | ||
quit.setGeometry(62, 40, 75, 30) | quit.setGeometry(62, 40, 75, 30) | ||
quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold)) | quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold)) | ||
Line 44: | Line 43: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === Läpikäynti rivi riviltä === | ||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
class MyWidget < Qt::Widget | class MyWidget < Qt::Widget | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Tässä luomme uuden luokan. Koska tämä luokka periytyy komponentista [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget], uusi luokka on käyttöliittymäkomponentti ja saattaa olla ylimmän tason ikkuna tai tytärkäyttöliittymäkomponentti (kuten [http://doc.qt.nokia.com/latest/qpushbutton.html Qt::PushButton] edellisessä kappaleessa). | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 56: | Line 55: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Tällä luokalla on vain yksi jäsen, konstruktori (niiden jäsenien lisäksi, jotka se perii komponentilta [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget]). Konstruktori on vakio Qt-käyttöliittymäkomponenttikonstruktori; sinun pitäisi aina käyttöliittymäkomponenttia luodessa lisätä samanlainen konstruktori. | |||
Argumentti on sen emokäyttöliittymäkomponentti. Ylimmän tason ikkunan luomiseksi määrittele emokomponentiksi '''<tt>nil</tt>'''. Kuten voit nähdä, tämän käyttöliittymäkomponentin oletukset osoittavat sen olevan ylimmän tason ikkuna. | |||
Kuten useimmat käyttöliittymäkomponentit, se vain välittää '''<tt>parent</tt>'''-parametrin [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget]-konstruktorille. (Jos olet uusi Ruby-kielessä, niin kutsumalla '''<tt>super</tt>''' ilman mitään parametreja välitetään automaattisesti kaikki metodin vastaanottamat parametrit superluokan samannimiselle metodille. ''Update'': Ilmeisesti on myös tärkeää jättää pois sulkeet — kutsumalla '''<tt>super()</tt>''' kutsutaan superluokan samanniminen metodi tyhjällä parametriluettelolla.) | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 66: | Line 65: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Koska tämä käyttöliittymäkomponentti ei tiedä, kuinka koon muuttamisia käsitellään, me korjaamme sen koon. Seuraavasssa kappaleessa näytämme, kuinka käyttöliittymäkomponentti voi vastata käyttäjältä saapuviin koon muuttamistapahtumiin. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
quit = Qt::PushButton.new(tr(' | quit = Qt::PushButton.new(tr('Poistu'), self) | ||
quit.setGeometry(62, 40, 75, 30) | quit.setGeometry(62, 40, 75, 30) | ||
quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold)) | quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold)) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Tässä luomme ja asetamme tämän käyttöliittymäkomponentin tytärkomponentin (uuden käyttöliittymäkomponentin emo on '''<tt>self</tt>, ts. '''<tt>MyWidget</tt>''' -ilmentymä). | |||
[http://doc.qt.nokia.com/latest/qobject.html#tr QObject::tr()] -funktiokutsu merkkijonoliteraalin 'Quit' ympärillä merkitsee kotoistettavan merkkijonon, mikä tekee mahdolliseksi sen muuttamisen ajoaikaisesti kotoistamistiedoston sisältöön perustuen. On hyvä tapa käyttää metodia [http://doc.qt.nokia.com/latest/qobject.html#tr QObject::tr()] käyttäjän näkemien merkkijonojen ympärillä siinä tapauksessa, että päätät myöhemmin kotoistaa sovelluksesi muille kielille. | |||
[http://doc.qt.nokia.com/latest/qwidget.html#geometry-prop Qt::Widget::setGeometry()] -kutsu asettaa sekä käyttöliittymäkomponentin näyttösijainnin että sen koon. Se on sama kuin jos kutsuttaisiin metodia [http://doc.qt.nokia.com/latest/qwidget.html#pos-prop Qt::Widget::move()], jota seuraa [http://doc.qt.nokia.com/latest/qwidget.html#size-prop Qt::Widget::resize()]. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 84: | Line 83: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Osoitin '''<tt>$qApp</tt>''' on yleismuuttuja, joka luodaan kun '''<tt>pyydät 'Qt'</tt>''':ta. Se osoittaa sovelluksen uniikkiin [http://doc.qt.nokia.com/latest/qapplication.html Qt::Application]-ilmentymään. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 95: | Line 94: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Tässä teemme uudesta tytärkomponentistamme ilmentymän, asetamme sen pääkäyttöliittymäkomponentiksi, ja suoritamme sovelluksen. | |||
=== | === Sovelluksen suorittaminen === | ||
Tämä ohjelma käyttäytyy hyvin samalla tavoin kuin edellinen ohjelma. Erot ovat siinä tavassa, jolla toteutamme sen. Se käyttäytyy kuitenkin hiukan eri tavalla. Yritä vain muuttaa sen kokoa huomataksesi eron. | |||
=== | === Harjoitukset === | ||
Yritä luoda toinen '''<tt>MyWidget</tt>'''-objekti. Mitä tapahtuu? | |||
Yritä lisätä lisää painikkeita ja laita muita käyttöliittymäkomponentteja kuin [http://doc.qt.nokia.com/latest/qpushbutton.html Qt::PushButton]. | |||
[[Category:Ruby]] | [[Category:Ruby]] |
Latest revision as of 14:16, 18 July 2012
Tutorial Series | Qt4 Ruby -oppikurssi |
Previous | Oppikurssi 3 - Perhearvot |
What's Next | Oppikurssi 5 - Lohkojen rakentaminen |
Further Reading | n/a |
Olkoon siellä käyttöliittymäkomponentteja
Tiedostot:
Yleiskuva
Tämä esimerkki näyttää kuinka luot oman käyttöliittymäkomponentin, ja kuvailee kuinka ohjaat käyttöliittymäkomponentin minimi- ja maksimikokoa.
require 'Qt4'
class MyWidget < Qt::Widget
def initialize(parent = nil)
super
setFixedSize(200, 120)
quit = Qt::PushButton.new(tr('Poistu'), self)
quit.setGeometry(62, 40, 75, 30)
quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))
connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()'))
end
end
app = Qt::Application.new(ARGV)
widget = MyWidget.new()
widget.show()
app.exec()
Läpikäynti rivi riviltä
class MyWidget < Qt::Widget
Tässä luomme uuden luokan. Koska tämä luokka periytyy komponentista Qt::Widget, uusi luokka on käyttöliittymäkomponentti ja saattaa olla ylimmän tason ikkuna tai tytärkäyttöliittymäkomponentti (kuten Qt::PushButton edellisessä kappaleessa).
def initialize(parent = nil)
super
Tällä luokalla on vain yksi jäsen, konstruktori (niiden jäsenien lisäksi, jotka se perii komponentilta Qt::Widget). Konstruktori on vakio Qt-käyttöliittymäkomponenttikonstruktori; sinun pitäisi aina käyttöliittymäkomponenttia luodessa lisätä samanlainen konstruktori.
Argumentti on sen emokäyttöliittymäkomponentti. Ylimmän tason ikkunan luomiseksi määrittele emokomponentiksi nil. Kuten voit nähdä, tämän käyttöliittymäkomponentin oletukset osoittavat sen olevan ylimmän tason ikkuna.
Kuten useimmat käyttöliittymäkomponentit, se vain välittää parent-parametrin Qt::Widget-konstruktorille. (Jos olet uusi Ruby-kielessä, niin kutsumalla super ilman mitään parametreja välitetään automaattisesti kaikki metodin vastaanottamat parametrit superluokan samannimiselle metodille. Update: Ilmeisesti on myös tärkeää jättää pois sulkeet — kutsumalla super() kutsutaan superluokan samanniminen metodi tyhjällä parametriluettelolla.)
setFixedSize(200, 120)
Koska tämä käyttöliittymäkomponentti ei tiedä, kuinka koon muuttamisia käsitellään, me korjaamme sen koon. Seuraavasssa kappaleessa näytämme, kuinka käyttöliittymäkomponentti voi vastata käyttäjältä saapuviin koon muuttamistapahtumiin.
quit = Qt::PushButton.new(tr('Poistu'), self)
quit.setGeometry(62, 40, 75, 30)
quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))
Tässä luomme ja asetamme tämän käyttöliittymäkomponentin tytärkomponentin (uuden käyttöliittymäkomponentin emo on self, ts. MyWidget -ilmentymä).
QObject::tr() -funktiokutsu merkkijonoliteraalin 'Quit' ympärillä merkitsee kotoistettavan merkkijonon, mikä tekee mahdolliseksi sen muuttamisen ajoaikaisesti kotoistamistiedoston sisältöön perustuen. On hyvä tapa käyttää metodia QObject::tr() käyttäjän näkemien merkkijonojen ympärillä siinä tapauksessa, että päätät myöhemmin kotoistaa sovelluksesi muille kielille.
Qt::Widget::setGeometry() -kutsu asettaa sekä käyttöliittymäkomponentin näyttösijainnin että sen koon. Se on sama kuin jos kutsuttaisiin metodia Qt::Widget::move(), jota seuraa Qt::Widget::resize().
connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()'))
Osoitin $qApp on yleismuuttuja, joka luodaan kun pyydät 'Qt':ta. Se osoittaa sovelluksen uniikkiin Qt::Application-ilmentymään.
app = Qt::Application.new(ARGV)
widget = MyWidget.new()
widget.show()
app.exec()
Tässä teemme uudesta tytärkomponentistamme ilmentymän, asetamme sen pääkäyttöliittymäkomponentiksi, ja suoritamme sovelluksen.
Sovelluksen suorittaminen
Tämä ohjelma käyttäytyy hyvin samalla tavoin kuin edellinen ohjelma. Erot ovat siinä tavassa, jolla toteutamme sen. Se käyttäytyy kuitenkin hiukan eri tavalla. Yritä vain muuttaa sen kokoa huomataksesi eron.
Harjoitukset
Yritä luoda toinen MyWidget-objekti. Mitä tapahtuu?
Yritä lisätä lisää painikkeita ja laita muita käyttöliittymäkomponentteja kuin Qt::PushButton.