Development/Tutorials/Qt4 Ruby Tutorial/Chapter 05/fi: Difference between revisions
Centerlink (talk | contribs) (Created page with "'''<tt>MyWidget</tt>''' nyt käyttää komponenttia [http://doc.qt.nokia.com/latest/qvboxlayout.html Qt::VBoxLayout] hallinnoimaan sen tytärkäyttöliittymäkomponentin geometri...") |
Centerlink (talk | contribs) (Created page with "[http://doc.qt.nokia.com/latest/qwidget.html#setLayout Qt::Widget::setLayout()]-funktio asentaa asettelun kohteelle '''<tt>MyWidget</tt>'''. Tämä tekee asettelusta käyttöliit...") |
||
Line 87: | Line 87: | ||
'''<tt>MyWidget</tt>''' nyt käyttää komponenttia [http://doc.qt.nokia.com/latest/qvboxlayout.html Qt::VBoxLayout] hallinnoimaan sen tytärkäyttöliittymäkomponentin geometriaa. Siitä syystä meidän ei tarvitse määritellä näytön koordinaatteja jokaiselle käyttöliitymäkomponentille, kuten teimme kappaleessa 4. Sen lisäksi, asettelun käyttäminen varmistaa, että tytärkomponentin koko muuttuu, kun käyttöliittymäkomponentin kokoa muutetaan. Lisäämme sitten '''<tt>quit</tt>'''-, '''<tt>lcd</tt>'''-, ja '''<tt>slider</tt>'''-käyttöliittymäkomponentit asetteluun käyttäen komponenttimetodia [http://doc.qt.nokia.com/latest/qboxlayout.html#addWidget Qt::BoxLayout::addWidget()]. | '''<tt>MyWidget</tt>''' nyt käyttää komponenttia [http://doc.qt.nokia.com/latest/qvboxlayout.html Qt::VBoxLayout] hallinnoimaan sen tytärkäyttöliittymäkomponentin geometriaa. Siitä syystä meidän ei tarvitse määritellä näytön koordinaatteja jokaiselle käyttöliitymäkomponentille, kuten teimme kappaleessa 4. Sen lisäksi, asettelun käyttäminen varmistaa, että tytärkomponentin koko muuttuu, kun käyttöliittymäkomponentin kokoa muutetaan. Lisäämme sitten '''<tt>quit</tt>'''-, '''<tt>lcd</tt>'''-, ja '''<tt>slider</tt>'''-käyttöliittymäkomponentit asetteluun käyttäen komponenttimetodia [http://doc.qt.nokia.com/latest/qboxlayout.html#addWidget Qt::BoxLayout::addWidget()]. | ||
[http://doc.qt.nokia.com/latest/qwidget.html#setLayout Qt::Widget::setLayout()]-funktio asentaa asettelun kohteelle '''<tt>MyWidget</tt>'''. Tämä tekee asettelusta käyttöliittymäkomponentin '''<tt>MyWidget</tt>''' tytärkomponentin, joten meidän ei tarvitse huolehtia sen poistamisestat; se poistetaan yhdessä käyttöliittymäkomponentin '''<tt>MyWidget</tt>''':n kanssa. Myös kutsu kohteeseen [http://doc.qt.nokia.com/latest/qwidget.html#setLayout Qt::Widget::setLayout()] muodostaa automaattisesti käyttöliittymäkomponentin emo-tytärsuhteen niin että se on '''<tt>MyWidget</tt>''':n tytär. Tästä syystä meidän ei tarvitse määritellä käyttöliitymäkomponenttia '''<tt>self</tt>''' komponenttien '''<tt>quit</tt>''', '''<tt>lcd</tt>''', ja '''<tt>slider</tt>''' emoksi. | |||
In Qt, widgets are either children of other widgets (e.g. '''<tt>self</tt>'''), or they have no parent. A widget can be ''added'' to a layout, in which case the layout becomes responsible for managing the geometry of that widget, but the layout can never act as a parent itself. Indeed, [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget]'s constructor takes a [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget] pointer for the parent, and [http://doc.qt.nokia.com/latest/qlayout.html Qt::Layout] doesn't inherit from [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget]. | In Qt, widgets are either children of other widgets (e.g. '''<tt>self</tt>'''), or they have no parent. A widget can be ''added'' to a layout, in which case the layout becomes responsible for managing the geometry of that widget, but the layout can never act as a parent itself. Indeed, [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget]'s constructor takes a [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget] pointer for the parent, and [http://doc.qt.nokia.com/latest/qlayout.html Qt::Layout] doesn't inherit from [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget]. |
Revision as of 18:40, 4 September 2011
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 05
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 -oppikurssi |
Previous | Oppikurssi 4 - Olkoon siinä käyttöliittymäkomponentti |
What's Next | Oppikurssi 6 - Rakentamislohkot Galore! |
Further Reading | n/a |
Rakentamislohkot
Tiedostot:
Yleiskuva
Tämä esimerkki näyttää kuinka useita käyttöliittymäkomponentteja luodaan ja yhdistetään yhteen käyttäen signaaleja ja aikavälejä, ja kuinka koon muuttamisia käsitellään.
require 'Qt4'
class MyWidget < Qt::Widget
def initialize()
super()
quit = Qt::PushButton.new('Poistu')
quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))
lcd = Qt::LCDNumber.new(2)
slider = Qt::Slider.new(Qt::Horizontal)
slider.setRange(0, 99)
slider.setValue(0)
connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()'))
connect(slider, SIGNAL('valueChanged(int)'), lcd, SLOT('display(int)'))
layout = Qt::VBoxLayout.new()
layout.addWidget(quit)
layout.addWidget(lcd)
layout.addWidget(slider)
setLayout(layout)
end
end
app = Qt::Application.new(ARGV)
widget = MyWidget.new()
widget.show()
app.exec()
Läpikäynti rivi riviltä
lcd = Qt::LCDNumber.new(2)
lcd on Qt::LCDNumber, käyttöliitymäkomponentti, joka näyttää numeroita nestekidenäytön tyyppisesti. Tämä ilmentymä on asetettu näyttämään kahta numeroa.
slider = Qt::Slider.new(Qt::Horizontal)
slider.setRange(0, 99)
slider.setValue(0)
Käyttäjä voi käyttää Qt::Slider -käyttöliittymäkomponenttia säätämään kokon aislukuarvon lukualueella. Tässä luomme vaakasuoran komponentin, asetetaan sen minimiarvoksi 0, sen maksimiarvoksi 99, ja sen alkuarvoksi 0.
connect(slider, SIGNAL('valueChanged(int)'), lcd, SLOT('display(int)'))
Tässä käytämme signaalit ja aikavälit -mekanismia liukukytkimen kytkemiseksi QAbstractSlider::valueChanged() -signaaliin nestekidenumeronäytön display() -aikavälissä.
Milloin tahansa liukukytkimen arvo muuttuu, se lähettää uuden arvon QAbstractSlider::valueChanged() -signaalilla. Koska tuo signaali on yhdistetty nestekidenäytön numeroiden QLCDNumber::display() -aikaväliin, aikaväliä kutsutaan, kun signaalia lähetetään. Kumpikaan komponenteista ei tiedä toisesta. Tämä on olennaista komponenttiohjelmoinnissa.
layout = Qt::VBoxLayout.new()
layout.addWidget(quit)
layout.addWidget(lcd)
layout.addWidget(slider)
setLayout(layout)
MyWidget nyt käyttää komponenttia Qt::VBoxLayout hallinnoimaan sen tytärkäyttöliittymäkomponentin geometriaa. Siitä syystä meidän ei tarvitse määritellä näytön koordinaatteja jokaiselle käyttöliitymäkomponentille, kuten teimme kappaleessa 4. Sen lisäksi, asettelun käyttäminen varmistaa, että tytärkomponentin koko muuttuu, kun käyttöliittymäkomponentin kokoa muutetaan. Lisäämme sitten quit-, lcd-, ja slider-käyttöliittymäkomponentit asetteluun käyttäen komponenttimetodia Qt::BoxLayout::addWidget().
Qt::Widget::setLayout()-funktio asentaa asettelun kohteelle MyWidget. Tämä tekee asettelusta käyttöliittymäkomponentin MyWidget tytärkomponentin, joten meidän ei tarvitse huolehtia sen poistamisestat; se poistetaan yhdessä käyttöliittymäkomponentin MyWidget:n kanssa. Myös kutsu kohteeseen Qt::Widget::setLayout() muodostaa automaattisesti käyttöliittymäkomponentin emo-tytärsuhteen niin että se on MyWidget:n tytär. Tästä syystä meidän ei tarvitse määritellä käyttöliitymäkomponenttia self komponenttien quit, lcd, ja slider emoksi.
In Qt, widgets are either children of other widgets (e.g. self), or they have no parent. A widget can be added to a layout, in which case the layout becomes responsible for managing the geometry of that widget, but the layout can never act as a parent itself. Indeed, Qt::Widget's constructor takes a Qt::Widget pointer for the parent, and Qt::Layout doesn't inherit from Qt::Widget.
Running the Application
The LCD number reflects everything you do to the slider, and the widget handles resizing well. Notice that the LCD number widget changes in size when the window is resized (because it can), but the others stay about the same (because otherwise they would look strange).
Exercises
Try changing the LCD number to add more digits or to change mode (Qt::LCDNumber::setMode()). You can even add four push buttons to set the number base.
You can also change the slider's range.
Perhaps it would have been better to use Qt::SpinBox than a slider?
Try to make the application quit when the LCD number overflows.