Development/Tutorials/Qt4 Ruby Tutorial/Chapter 06/fi: Difference between revisions

From KDE TechBase
(Created page with "Loimme yhdeksän '''<tt>LCDRange</tt>'''-käyttöliittymäkomponenttia, jotka kaikki ovat rasteriobjektin lapsia, ja järjesteämme ne kolmeen riviin ja kolmeen sarakkeeseen.")
(Created page with "=== Sovelluksen suorittaminen ===")
Line 128: Line 128:
Loimme yhdeksän '''<tt>LCDRange</tt>'''-käyttöliittymäkomponenttia, jotka kaikki ovat rasteriobjektin lapsia, ja järjesteämme ne kolmeen riviin ja kolmeen sarakkeeseen.  
Loimme yhdeksän '''<tt>LCDRange</tt>'''-käyttöliittymäkomponenttia, jotka kaikki ovat rasteriobjektin lapsia, ja järjesteämme ne kolmeen riviin ja kolmeen sarakkeeseen.  


=== Running the Application ===
=== Sovelluksen suorittaminen ===


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.  

Revision as of 11:33, 26 September 2011

Other languages:


Development/Tutorials/Qt4 Ruby Tutorial/Chapter 06


Rakennetaan Blocks Galore!
Tutorial Series   Qt4 Ruby -oppikurssi
Previous   Oppikurssi 5 - Rakennetaan lohkoja
What's Next   Oppikurssi 7 - Yksi asia johtaa toiseen
Further Reading   n/a

Rakennetaan Blocks Galore!

Files:

Yleistä

Tämä esimerkki näyttää, kuinka kaksi käyttöliittymäkomponenttia kapseloidaan uuteen komponenttiin ja kuinka helppoa on käyttää monia käyttöliittymäkomponentteja. Ensimmäisen kerran käytämme räätälöityä käyttöliittymäkomponenttia lapsikäyttöliittymäkomponenttina.

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()

Läpikäynti rivi rivilltä

class LCDRange < Qt::Widget

LCDRange-käyttöliittymäkomponentti on ilman mitään API-sovellusrajapintaa. Sillä on vain konstruktorir. Tämä tyyppiset käyttöliittymäkomponentit eivät ole kovin hyödyllisiä, joten lisäämme jonkun API-sovellusrajapinnan myöhemmin.

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

Tämä on nostettu suoraan MyWidget-konstruktorista Kappaleessa 5. Ainoa ero on Quit-painike ja luokan uudelleennimeäminen.

class MyWidget < Qt::Widget

MyWidget ei myöskään sisällä API-sovellusrajapintaa, paitsi konstruktorin.

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()'))

Painonappi, näyttää olevan, mitä LCDRange on nyt, on eroteltu niin että meillä voi olla yksi Quit-painike ja monia LCDRange-objekteja.

    grid = Qt::GridLayout.new()

Loimme Qt::Widget-käyttöliittymäkomponentin Qt::GridLayout-sijoittelulla, joka sisältää kolma saraketta. Qt::GridLayout-sijoittelu järjestää käyttöliittymäkomponentit automaattisesti riveihin ja sarakkeisiin; voit määritellä rivien ja sarakkeiden lukumäärn, kun lisäät käyttöliittymäkomponentteja sijoitteluun, ja Qt::GridLayout-sovittaa ne rasteriin.

for row in 0..2
  for column in 0..2
    grid.addWidget(LCDRange.new(), row, column)
  end
end

Loimme yhdeksän LCDRange-käyttöliittymäkomponenttia, jotka kaikki ovat rasteriobjektin lapsia, ja järjesteämme ne kolmeen riviin ja kolmeen sarakkeeseen.

Sovelluksen suorittaminen

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.