Sei sulla pagina 1di 58

Rub Qt tutorial

Nota: Pagina para descargar Qt cualquier versin ftp://ftp.qt-project.org/qt/source/ Este tutorial es Ruby Qt. En este tutorial usted aprender los fundamentos de la programacin en Qt GUI con el lenguaje Ruby. El tutorial es conveniente para los principiantes y los programadores intermedios.

Tabla de contenidos

Introduccin Diseo de gestin Artilugios Mens y barras de herramientas Dilogos Pintura Custom Widget Nibbles

Qt
Qt es un framework de aplicaciones multi-plataforma de desarrollo. Algunas de las aplicaciones conocidas desarrolladas con Qt son KDE, Opera, Google Earth y Skype. Qt fue lanzado pblicamente por primera vez en mayo de 1995. Es de doble licencia. Eso significa, que puede ser utilizado para la creacin de aplicaciones de cdigo abierto, as como las comerciales. Qt toolkit es una herramienta muy poderosa. Est bien establecido en la comunidad de cdigo abierto.

Tutoriales similares
Hay un completo tutorial de Ruby en ZetCode. Rub GTK tutorial es un tutorial para otra biblioteca de interfaz grfica de usuario con el apoyo de Ruby. Qt4 tutorial presenta la biblioteca Qt en el lenguaje C + +.

ZetCode :: ltima modificacin el 02 de noviembre 2012 2007 - 2012 ene Bodnar

Introduccin a Ruby Qt

En esta parte del tutorial de Ruby Qt, vamos a introducir el conjunto de herramientas Qt y crear nuestros primeros programas que utilizan el lenguaje de programacin Ruby. El propsito de este tutorial es para empezar con el conjunto de herramientas Qt con el lenguaje Ruby. Las imgenes utilizadas en este tutorial puede ser descargado aqu . He utilizado algunos iconos del paquete de iconos tango del proyecto Gnome.

Sobre

Qt es una de las herramientas principales para la creacin de interfaces grficas de usuario. Ruby es un lenguaje de programacin popular.

Creacin de un mensaje de ayuda Creating a Tooltip


El primer ejemplo se mostrar una descripcin. Una descripcin es una pequea ventana rectangular, lo que da una breve informacin sobre un objeto. Por lo general es un componente GUI. Es parte del sistema de ayuda de la aplicacin.
#!/usr/bin/ruby # ZetCode Rub Qt tutorial # Este cdigo muestra una descripcin de # Una ventana # Autor: Jan Bodnar # website: www.zetcode.com # ltima modificacin: 09 2012 require 'Qt' class QtApp < Qt::Widget def initialize super setWindowTitle "Tooltip" setToolTip "This is Qt::Widget" resize 250, 150 move 300, 300 show end end

app = Qt::Application.new ARGV QtApp.new app.exec

El ejemplo crea una ventana. Si nos site el puntero del ratn sobre el rea de la ventana, una informacin sobre herramientas aparece.
require 'Qt'

El require importa palabras claves de tipos necesarios que vamos a utilizar en la aplicacin.
class QtApp<Qt::Widget

El ejemplo hereda de un Qt :: Widget . La clase Widget es la clase base de todos los objetos de interfaz de usuario. El widget es el tomo de la interfaz de usuario. Recibe los eventos del ratn, del teclado y del otro del sistema de ventanas.
setWindowTitle "Tooltip"

Esta llamada al mtodo crea un ttulo para la ventana.


setToolTip "Este es Qt :: widget"

El setToolTip mtodo crea un texto de ayuda para el objeto Widget.


resize 250, 150

Aqu se establece la anchura y la altura de la ventana.


move 300, 300

El mtodo move mueve la ventana en la pantalla.


show

Cuando todo est listo, se muestra la ventana de la pantalla.


app = Qt::Application.new ARGV QtApp.new app.exec

Estas tres lneas instalan la aplicacin.

Figura: Tooltip

Centrar una ventana


En el segundo ejemplo, vamos a centrar la ventana en la pantalla.
#!/usr/bin/ruby # # # # # # # # ZetCode Ruby Qt tutorial This program centers a window on the screen. author: Jan Bodnar website: www.zetcode.com last modified: September 2012

require 'Qt' WIDTH = 250 HEIGHT = 150 class QtApp < Qt::Widget def initialize super setWindowTitle "Center" resize WIDTH, HEIGHT center show end def center qdw = Qt::DesktopWidget.new screenWidth = qdw.width screenHeight = qdw.height

x = (screenWidth - WIDTH) / 2 y = (screenHeight - HEIGHT) / 2 move x, y end end app = Qt::Application.new ARGV QtApp.new app.exec

El conjunto de herramientas Qt toolkit, no tiene un mtodo simple para centrar una ventana.
WIDTH = 250 HEIGHT = 150

Estas dos constantes definen la anchura y la altura de la ventana de aplicacin.


qdw = Qt :: DesktopWidget.new

La clase Qt :: DesktopWidget proporciona informacin sobre la pantalla.


screenWidth = qdw.width screenHeight = qdw.height

Aqu se determina el ancho de la pantalla y la altura.


x = (screenWidth - WIDTH) / 2 y = (screenHeight - HEIGHT) / 2

A continuacin se calcula la coordenadas x, y de la ventana centrada. Para centrar una ventana en la pantalla, es necesario conocer el tamao de la pantalla y el tamao de la ventana.
move x, y

Nos mueve la ventana para las coordenadas x, y consideradas

Salga botn Quit button


En el ltimo ejemplo de esta seccin, vamos a crear un botn de salida. Cuando se pulsa este botn, la aplicacin termina.
#!/usr/bin/ruby # # # # # # # # # ZetCode Ruby Qt tutorial This program creates a quit button. When we press the button, the application terminates. author: Jan Bodnar website: www.zetcode.com last modified: September 2012

require 'Qt' class QtApp < Qt::Widget def initialize super setWindowTitle "Quit button" init_ui resize 250, 150 move 300, 300 show end def init_ui quit = Qt::PushButton.new 'Quit', self quit.resize 80, 30 quit.move 50, 50 connect quit, SIGNAL('clicked()'), $qApp, SLOT('quit()') end end app = Qt::Application.new ARGV QtApp.new app.exec

La clase Qt :: PushButton muestra un botn en Ruby Qt. Es un widget rectangular y por lo general muestra una etiqueta de texto.

init_ui

Nos delega la creacin de la interfaz de usuario para el mtodo init_ui


quit = Qt::PushButton.new 'Quit', self

Creamos el widget de botn. El primer parmetro del constructor es la etiqueta que muestra el botn. El segundo parmetro es el widget padre del botn.
quit.resize 80, 30 quit.move 50, 50

Nos da el tamao y la posicin del widget de botn.


connect quit, SIGNAL('clicked()'), $qApp, SLOT('quit()')

El clicked seal se emite cuando hacemos clic sobre el botn de salida. La conexin mtodo, se conecta una seal a una ranura particular de un objeto. En nuestro caso, es el quit mtodo del objeto de aplicacin. El $qApp es un puntero global a la instancia de solicitud.

Figura: Quit botn Esta seccin fue una introduccin al kit de herramientas Qt con el lenguaje Ruby.

Diseo de gestin
En esta parte del tutorial de programacin Ruby Qt, vamos a introducir los administradores de diseo. Cuando diseamos el GUI, la interfaz grfica de usuario de nuestra aplicacin, podemos decidir qu componentes vamos a utilizar y cmo vamos a organizar los componentes de la aplicacin. Para organizar nuestros componentes, utilizamos especializados objetos no visibles llamados controladores de distribucin. Hay varias opciones en Qt. Podemos utilizar el posicionamiento absoluto, una funcin de gestores de diseo o crear un administrador de diseo personalizado. Tambin podemos crear los diseos visualmente utilizando el Qt Designer.

Qt tiene algunos controladores de distribucin importantes incorporadas. El Qt:: VBoxLayout es una clase para alinear verticalmente los widgets. Qt::HBoxLayout alinea los widgets horizontalmente. El Qt::GridLayout es una clase que expone los widgets en una cuadrcula. El diseo de cuadrcula es el gestor de diseo ms flexible. Los diseos de caja pueden anidarse uno dentro de otro para crear diseos complejos.

Posicionamiento absoluto

En la mayora de los casos, los programadores deben usar controladores de distribucin. Hay algunas situaciones, en las que podemos utilizar el posicionamiento absoluto. En la posicin absoluta, el programador especifica la posicin y el tamao de cada widget en pxeles. El tamao y la posicin de un control no cambian, si cambia el tamao de una ventana. Aplicaciones de aspecto diferente en las distintas plataformas, lo que se ve bien en Linux, no puede tener un buen aspecto en Mac OS. El Cambio de fuentes en su aplicacin puede estropear el diseo. Si traduce la aplicacin en otro idioma, debe rehacer su diseo. Por todos estos problemas, utilice el posicionamiento absoluto slo cuando tenga una razn para hacerlo.
#!/usr/bin/ruby # # # # # # # # ZetCode Ruby Qt tutorial In this program, we lay out widgets using absolute positioning. author: Jan Bodnar website: www.zetcode.com last modified: September 2012

require 'Qt' class QtApp < Qt::Widget def initialize super setWindowTitle "Absolute" init_ui resize 300, 280 move 300, 300 show end def init_ui

setStyleSheet "QWidget { background-color: #414141 }" bardejov = Qt::Pixmap.new "bardejov.jpg" rotunda = Qt::Pixmap.new "rotunda.jpg" mincol = Qt::Pixmap.new "mincol.jpg" barLabel = Qt::Label.new self barLabel.setPixmap bardejov barLabel.move 20, 20 rotLabel = Qt::Label.new self rotLabel.setPixmap rotunda rotLabel.move 40, 160 minLabel = Qt::Label.new self minLabel.setPixmap mincol minLabel.move 170, 50 end end app = Qt::Application.new ARGV QtApp.new app.exec

En este ejemplo, se muestran tres imgenes utilizando la posicin absoluta.


barLabel = Qt::Label.new self barLabel.setPixmap bardejov

El Qt::Label widget se utiliza para guardar la imagen.


barLabel.move 20, 20

Usamos el mtodo move para colocar la etiqueta de la ventana en x = 20, y = 20. Al cambiar el tamao de la ventana, las etiquetas conservan su tamao inicial.

Figura: Posicionamiento absoluto

Botones ejemplo
En el siguiente ejemplo, vamos a colocar dos botones en la esquina inferior derecha de la ventana.
#!/usr/bin/ruby # # # # # # # # # ZetCode Ruby Qt tutorial In this program, we use box layouts to position two buttons in the bottom right corner of the window. author: Jan Bodnar website: www.zetcode.com last modified: September 2012

require 'Qt' class QtApp < Qt::Widget def initialize super setWindowTitle "Buttons" init_ui resize 330, 170 move 300, 300

show end def init_ui vbox = Qt::VBoxLayout.new self hbox = Qt::HBoxLayout.new ok = Qt::PushButton.new "OK", self apply = Qt::PushButton.new "Apply", self hbox.addWidget ok, 1, Qt::AlignRight hbox.addWidget apply vbox.addStretch 1 vbox.addLayout hbox end end app = Qt::Application.new ARGV QtApp.new app.exec

Utilizamos diseos anidados caja para que nuestro diseo previsto.


vbox = Qt::VBoxLayout.new self hbox = Qt::HBoxLayout.new

Utilizamos una caja vertical y una caja horizontal.


ok = Qt::PushButton.new "OK", self apply = Qt::PushButton.new "Apply", self

Estos son los dos botones que se incluirn en la esquina inferior derecha de la ventana.
hbox.addWidget ok, 1, Qt::AlignRight

Ponemos el botn Aceptar en el cuadro horizontal. El segundo parmetro es el factor stretch. Se ampla el rea asignada al botn ok. Se necesita todo el espacio disponible que queda. La alineacin de la windget dentro de esta zona es controlada por el tercer parmetro. El el botn Qt::AlignRight se alinear a la derecha.
vbox.addStretch 1

Esta lnea crea un espacio vertical amplio blanco, lo que har que la caja horizontal con los botones se ubiquen en la parte inferior.

vbox.addLayout hbox

La caja horizontal est anidada dentro de la caja vertical.

Figura: Botones ejemplo

Ejemplo en Windows
#!/usr/bin/ruby # # # # # # # # ZetCode Ruby Qt tutorial In this program, use box layouts to create a Windows example author: Jan Bodnar website: www.zetcode.com last modified: September 2012

El siguiente es un ejemplo ms complicado con diseos de caja anidados.

require 'Qt' class QtApp < Qt::Widget def initialize super setWindowTitle "Windows" init_ui resize 350, 300 move 300, 300 show end

def init_ui vbox = Qt::VBoxLayout.new self vbox1 = Qt::VBoxLayout.new hbox1 = Qt::HBoxLayout.new hbox2 = Qt::HBoxLayout.new windLabel = Qt::Label.new "Windows", self edit = Qt::TextEdit.new self edit.setEnabled false activate = Qt::PushButton.new "Activate", self close = Qt::PushButton.new "Close", self help = Qt::PushButton.new "Help", self ok = Qt::PushButton.new "OK", self vbox.addWidget windLabel vbox1.addWidget vbox1.addWidget hbox1.addWidget hbox1.addLayout activate close, 0, Qt::AlignTop edit vbox1

vbox.addLayout hbox1 hbox2.addWidget help hbox2.addStretch 1 hbox2.addWidget ok vbox.addLayout hbox2, 1 setLayout vbox end end app = Qt::Application.new ARGV QtApp.new app.exec

En esta presentacin, hemos utilizado dos cajas verticales y horizontales.


box = Qt::VBoxLayout.new self

Este es el diseo base del ejemplo.


windLabel = Qt::Label.new "Windows", self

Primero va el widget etiqueta. Se va simplemente a la parte superior de la caja vertical.


vbox1.addWidget activate vbox1.addWidget close, 0, Qt::AlignTop

hbox1.addWidget edit hbox1.addLayout vbox1 vbox.addLayout hbox1

En la parte central de la ventana que tenemos un control de edicin de texto y dos botones verticalmente alineados. Los botones de entrar en una caja vertical. Los botones estn alineadas a la parte superior dentro de esta caja vertical. La caja vertical y la edicin de texto vaya en una caja horizontal. Este cuadro horizontal va a la caja vertical de la base, justo debajo del control de etiqueta.
Ayuda hbox2.addWidget hbox2.addStretch 1 hbox2.addWidget ok vbox.addLayout hbox2, 1

La ayuda y el botn Aceptar entrar en otra caja horizontal. Hay un espacio expandido blanco entre estos dos botones. Una vez ms, la caja horizontal va a la caja base vertical.
setLayout vbox

El cuadro de base vertical est dispuesto a ser el diseo principal de la ventana.

Figura: Ejemplo en Windows

Ejemplo Nueva carpeta


En el ltimo ejemplo, se utiliza el Qt :: GridLayout Manager para crear un ejemplo de carpeta nuevo diseo.

#! / Usr / bin / ruby # ZetCode Rub tutorial Qt # # En este programa, utilice el GridLayout # para crear un ejemplo en Nueva carpeta. # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin: 09 2012 require 'Qt' clase QtApp <Qt :: Widget def initialize sper setWindowTitle "Nueva carpeta" init_ui cambio de tamao 300, 300 se mueven 300, 300 Fin de la presentacin def init_ui red = Qt :: GridLayout.new auto nameLabel = Qt :: Label.new "Nombre", self NAMEEDIT = Qt :: texto LineEdit.new self = Qt :: TextEdit.new auto okButton = Qt :: PushButton.new "OK", self closeButton = Qt :: PushButton.new "Close", self grid.addWidget nameLabel, 0, 0 grid.addWidget NAMEEDIT, 0, 1, 1, 3 grid.addWidget texto, 1, 0, 2, 4 grid.setColumnStretch 1, 1 grid.addWidget okButton, 4, 2 grid.addWidget closeButton, 4, 3 end end app = Qt :: Application.new (ARGV) QtApp.new app.exec

En nuestro ejemplo, tenemos una etiqueta, una lnea de edicin, una edicin de texto y dos botones.
cuadrcula = Qt :: GridLayout.new auto

Creamos una instancia de la GridLayout Qt :: gerente.


grid.addWidget nameLabel, 0, 0

Ponemos el control de etiqueta en la primera celda de la cuadrcula. Las clulas contar desde 0. Los dos ltimos parmetros son el nmero de fila y columna.
grid.addWidget NAMEEDIT, 0, 1, 1, 3

El widget de edicin se sita en la primera fila, segunda columna. Los dos ltimos parmetros son el tamao de fila y el tamao de columna. Horizontalmente, el widget se extender por tres columnas.
grid.setColumnStretch 1, 1

Los parmetros del mtodo son el nmero de columna y el factor de estiramiento. Aqu establecemos factor de estiramiento 1 a la segunda columna. Esto significa, que esta columna tendr todo el espacio restante. As lo establece, porque queramos que nuestros botones para conservar su tamao inicial.

Figura: ejemplo Nueva carpeta

Artilugios

En esta parte del tutorial de programacin Ruby Qt, cubriremos los widgets bsicos. Los widgets son los bloques bsicos de construccin de una aplicacin GUI. Con los aos, varios widgets se convirti en un estndar en todos los conjuntos de herramientas en todas las plataformas de sistemas operativos. Por ejemplo, un botn, una casilla de verificacin o una barra de desplazamiento. Qt tiene un rico conjunto de controles que cubre la mayor parte de las necesidades de programacin. Aparatos ms especializados se pueden crear como widgets personalizados.

Qt :: CheckBox
El Qt :: CheckBox es un widget, que tiene dos estados. On y Off. El estado On se visualiza mediante una marca de verificacin. Se utiliza para denotar una propiedad booleana. El Qt :: widget de casilla de verificacin ofrece una casilla con una etiqueta de texto.
#! / Usr / bin / ruby # ZetCode tutorial de Ruby Qt # # Este programa utiliza Qt :: CheckBox # widget para mostrar / ocultar el ttulo de # de la ventana. # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin: 09 2012 require 'Qt' clase QtApp <Qt :: Widget slots 'on_toggled (bool)' def initialize sper setWindowTitle "Qt :: CheckBox" init_ui resize 250, 150 se mueven 300, 300 def espectculo final init_ui

cb = Qt :: CheckBox.new "Mostrar ttulo", self verdadero cb.setChecked cb connect, SIGNAL ("activarse y desactivarse (bool)"), yo, SLOT ("on_toggled (bool ) ") cb.move 50, 50 def final on_toggled estatal si el estado setWindowTitle" Qt :: CheckBox "else setWindowTitle" "end end end app = Qt :: Application.new ARGV QtApp.new app.exec

En nuestro ejemplo, podemos colocar una casilla de verificacin en la ventana. La casilla de verificacin muestra / oculta el ttulo de la ventana.
setWindowTitle "Qt :: CheckBox"

Durante la construccin de la ventana, ponemos el ttulo de la ventana.


cb = Qt :: CheckBox.new "Mostrar ttulo", self

El Qt :: CheckBox widget est creado. El primer parmetro del constructor es su etiqueta de texto. El segundo parmetro es el widget padre.
cb.setChecked verdadero

El ttulo es visible al comienzo de la aplicacin. As que la casilla de verificacin debe ser revisado tambin.
conectar cb, SIGNAL ("activarse y desactivarse (bool)"), yo, SLOT ("on_toggled (bool)")

La activarse la seal se emite cuando el estado de una casilla de verificacin. Cuando se emite la seal, que desencadenan la on_toggled mtodo.
si el estado setWindowTitle "Qt :: CheckBox" else setWindowTitle "" end

Segn el estado de la casilla de verificacin, nosotros mostrar u ocultar el ttulo de la ventana.

Figura: Qt :: CheckBox

Qt :: Etiqueta
El Qt :: Etiqueta widget se utiliza para mostrar texto o imagen. Sin interaccin del usuario est disponible.
#! / Usr / bin / ruby # ZetCode tutorial de Ruby Qt # # Este programa utiliza Qt :: widget de etiqueta para mostrar # letra de una cancin. # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin: 09 2012 requieren de clase 'Qt' QtApp <Qt :: Widget def initialize sper setWindowTitle "Sabes que no soy buena" init_ui cambio de tamao 250, 150 se mueven 300, 300 def espectculo final init_ui text = "Te veo abajo en el bar y escuch las mangas enrolladas y su crneo t-shirt Usted dice por qu lo hiciste con l hoy? oler y me fuera como si yo fuera Tanqueray \ n causa usted es mi to, mi to me la mano de Stella y volar por el tiempo que estoy fuera de la puerta se desgarra por hombres como Roger Moore \ n Me enga como saba que hara yo ya lo dije, era un problema que sabemos que No soy bueno "label = Qt :: Label.new texto, auto label.setFont Qt :: Font.new" Purisa ", 9 vbox = Qt :: VBoxLayout.new vbox.addWidget etiqueta setLayout vbox end end app = Qt :: Application.new ARGV QtApp.new app.exec

Nuestro ejemplo muestra la letra de una cancin en la ventana.


text = "Te veo abajo en el bar y escuch las mangas enrolladas y su crneo t-shirt ...

Se define un texto de lneas mltiples.


label = Qt :: Label.new texto, auto label.setFont Qt :: Font.new "Purisa", 9

Creamos el widget de etiqueta y cambiar su tipo de letra.


vbox = Qt :: VBoxLayout.new vbox.addWidget etiqueta setLayout vbox

En lugar de manualmente la codificacin de la posicin y el tamao de la etiqueta, es poner la etiqueta en un diseo de caja.

Figura: Qt :: Etiqueta

Qt :: LineEdit
El Qt :: LineEdit es un widget que permite introducir y editar una sola lnea de texto sin formato. Hay deshacer / rehacer, cortar / pegar y arrastrar y soltar las funciones disponibles para un Qt :: LineEdit widget.
#! / Usr / bin / ruby # ZetCode Rub Qt tutorial # # Este programa muestra el texto # que se introduce en un widget de Qt :: LineEdit # en un widget de Qt :: Label. # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin: 09 2012 requieren de clase 'Qt' QtApp <Qt :: 'on_changed (QString)' slots Widget def initialize sper setWindowTitle "LineEdit" init_ui cambio de tamao 250, 150 movimiento 300, 300 def espectculo final init_ui @ label = Qt :: Label.new auto edit = Qt :: LineEdit.new auto connect edicin, SIGNAL ("TextChanged (QString)"), yo, SLOT ("on_changed (QString)" ) edit.move 60, 100@label.move 60, 40 def final on_changed text@label.setText text@label.adjustSize end end app = Qt :: Application.new ARGV QtApp.new app.exec

En nuestro ejemplo se muestran dos widgets. Una lnea de edicin y un widget etiqueta. El texto introducido en la edicin en lnea se muestra el widget etiqueta.
edit = Qt :: LineEdit.new auto

El Qt :: LineEdit widget est creado.

conectar edicin, SIGNAL ("TextChanged (QString)"), yo, SLOT ("on_changed (QString)")

Cuando escriba o borre parte del texto de la edicin de lnea, el on_changed mtodo se dispara.
def on_changed text@label.setText text@label.adjustSize final

En el on_changed mtodo, se establece el contenido de la edicin de lnea para el widget de etiqueta. El adjustSize mtodo garantiza que todo el texto es visible.

Figura: Qt :: LineEdit Widget

Botones de alternar
Botones de alternar son pulsadores con un pabelln conjunto comprobable. Toggle botn es un botn que tiene dos estados. Prensado y no presionado. Usted alternar entre estos dos estados haciendo clic en l. Hay situaciones en las que esta funcionalidad se adapta bien.
#! / Usr / bin / ruby # ZetCode tutorial de Ruby Qt # # Este programa utiliza botones de seleccin para cambiar el color de fondo # de # un widget. # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin: 09 2012 require 'Qt' clase QtApp <Qt :: Widget slots 'on_clicked () def initialize sper setWindowTitle "botn Toggle" init_ui cambio de tamao 300, 180 mover 300, 300 def espectculo final init_ui @ color = Qt :: Color.new 0, 0, 0 setGeometry 300, 300, 280, 170 setWindowTitle "ToggleButton" @ RedB = Qt :: 'Red' PushButton.new, auto @ RedB . setCheckable true@redb.move 10, 10 connect @ RedB, SIGNAL ("clicked ()"), SLOT ("on_clicked ()") = @ greenb Qt :: 'Green' PushButton.new, self@greenb.setCheckable verdadero @ greenb.move 10, 60 connect @ greenb, SIGNAL ("clicked () '), SLOT (" on_clicked () ") = @ blueb Qt :: PushButton.new" Azul ", self@blueb.setCheckable verdadero blueb @. movimiento de 10, 110 connect @ blueb, SIGNAL ("clicked ()"), SLOT ("on_clicked ()") @ cuadrado = Qt :: Widget.new self@square.setGeometry 150, 20, 100, 100@square.setStyleSheet "QWidget {background-color:% s}"% @ end def color.name on_clicked rojo = @ Color.red verde = @ = @ Color.green azul Color.Blue if@redb.isChecked rojo ms rojo = 255 = 0 End if@greenb.isChecked verde ms verde = 255 = 0

final if@blueb.isChecked azul ms azul = 255 = 0 @ end color = Qt :: Color.new rojo, verde, blue@square.setStyleSheet ("QWidget {backgroundcolor:% s} "% @ color.name) end end app = Qt :: Application.new ARGV QtApp.new app.exec

En el ejemplo de cdigo, se utilizan tres botones de seleccin para cambiar el color de un control rectangular.
@ RedB = Qt :: 'Red' PushButton.new, self@redb.setCheckable verdadero

Creamos un Qt :: PushButton widget. El setCheckable mtodo cambia el pulsador en un botn de activacin.


conectar @ RedB, SIGNAL ("clicked ()"), SLOT ("on_clicked ()")

Nos conecta el botn en el on_clicked llamada al mtodo.


@ Cuadrado = Qt :: Widget.new self@square.setGeometry 150, 20, 100, 100@square.setStyleSheet "QWidget {background-color:% s}"% @ color.name

Creamos un widget cuadrado. Hemos establecido su tamao. Al principio, es negro. En Qt, se utiliza hojas de estilos para personalizar el aspecto de un widget. Dentro de la on_clicked mtodo, se determina el valor del color y actualizar el widget cuadrado a un nuevo color.
rojo = @ Color.red verde = @ = @ Color.green azul Color.Blue

Aqu se determina el color actual del widget cuadrado.


if@redb.isChecked rojo ms rojo = 255 = 0 End

La parte roja del color se cambia, dependiendo del estado del botn de conmutacin rojo.
@ Color = Qt :: Color.new rojo, verde, azul

Creamos un valor nuevo color.


@ Square.setStyleSheet ("QWidget {background-color:% s}"% @ color.name)

El color de la plaza est actualizado.

Figura: Botones de alternar

Qt :: ComboBox
El Qt :: ComboBox es un widget que permite al usuario elegir entre una lista de opciones. Se trata de un control de seleccin que muestra el elemento actual, y puede mostrar una lista de elementos seleccionables. Un cuadro combinado puede ser editable. Se presenta una lista de opciones para el usuario de una manera que toma la cantidad mnima de espacio en la pantalla.
#! / Usr / bin / ruby # ZetCode tutorial de Ruby Qt # # Este programa utiliza el widget de Qt :: ComboBox. # La opcin seleccionada en el men desplegable que se muestra en el # widget de etiqueta. # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin: Sepetmber 2012 require 'Qt' clase QtApp <Qt :: ranuras widget 'on_activated (QString)' def initialize sper setWindowTitle "Qt :: ComboBox" init_ui resize 250, 150 se mueven 300, 300 def espectculo final init_ui @ label = Qt :: Label.new "Ubuntu", combo self = Qt :: ComboBox.new auto combo.addItem "Ubuntu" combo.addItem "Fedora" combo.addItem " Mandriva "combo.addItem" Red Hat "combo.addItem" Mint "combo connect, SIGNAL (" activado (QString) "), yo, SLOT (" on_activated (QString) ") combo.move 50, 50 30@label.move , 100 def final on_activated text@label.setText text@label.adjustSize end end app = Qt :: Application.new ARGV QtApp.new app.exec

En nuestro ejemplo de cdigo, tenemos dos widgets. Un cuadro combinado y un widget de etiqueta. La opcin seleccionada en un cuadro combinado se muestra en la etiqueta.
@ Label = Qt :: Label.new "Ubuntu", self

Esta es la etiqueta que se mostrar la opcin seleccionada en el cuadro combinado.

combo = Qt :: ComboBox.new auto

Creamos la instancia de la Qt :: ComboBox widget.


combo.addItem "Ubuntu" combo.addItem "Fedora" combo.addItem "Mandriva" combo.addItem "Red Hat" combo.addItem "Mint"

Cuadro combinado se rellena con los valores.


conectar combo, SIGNAL ("activado (QString)"), yo, SLOT ("on_activated (QString)")

Al seleccionar una opcin en el cuadro combinado, el on_activated mtodo se dispara.


def on_activated text@label.setText final text@label.adjustSize

En el on_activated mtodo, actualizamos el widget de etiqueta a la cadena seleccionada en el cuadro combinado.

Figura: Qt :: ComboBox Widget

En esta parte del tutorial de Ruby Qt, hemos presentado varios widgets Qt.

Mens y barras de herramientas


En esta parte del tutorial de programacin Ruby Qt, vamos a trabajar con los mens y barras de herramientas.

Una barra de men es una de las partes ms visibles de la aplicacin GUI. Se trata de un grupo de comandos situados en varios mens. Mientras que en las aplicaciones de consola que tena que recordar todos esos arcanos comandos, aqu tenemos la mayora de los comandos agrupados en partes lgicas. Hay normas aceptadas que reducen an ms la cantidad de gasto tiempo para aprender una nueva aplicacin. Mens de grupo comandos que podemos usar en una aplicacin. Las barras de herramientas proporcionan un acceso rpido a los comandos ms utilizados.

Men sencillo
El primer ejemplo se mostrar un men simple.
#! / Usr / bin / ruby # ZetCode Rub Qt tutorial # # Este programa muestra un sencillo men #. Tiene una accin, que # finalizar el programa, cuando # seleccionado. # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin: 11 2012 require 'Qt' clase QtApp <Qt :: MainWindow def initialize sper setWindowTitle "Men Simple" init_ui cambio de tamao 250, 150 se mueven 300, 300 Fin de la presentacin def init_ui quit = Qt :: Action.new "& Salir", el archivo self = MenuBar (). AgregarMen "& Archivo" file.addAction dejar connect (dejar de fumar, SIGNAL ("disparado ()"), Qt :: Application.instance, SLOT ("quit ()")) end end app = Qt :: Application.new ARGV QtApp.new app.exec

Tenemos una barra de mens, un men y una accin. Con el fin de trabajar con los mens, hay que heredar de MainWindow widget.
dejar de fumar = Qt :: Action.new "& Salir", auto

Esta lnea de cdigo crea una accin . Cada men tiene uno o ms objetos de accin. Tenga en cuenta el signo (&) carcter. Crea un acceso directo para el elemento. Alt + Q. Tambin subraya el carcter Q. El acceso directo est activado, cuando el men de archivo se coloca hacia abajo.
archivo = MenuBar (). AgregarMen "& Archivo" file.addAction dejar

Creamos un men de objetos. El carcter ampersand crea un acceso directo. Alt + F. Los atajos consecutivos Alt + F, Alt + Q salir de la aplicacin.

connect (dejar de fumar, SIGNAL ("disparado ()"), Qt :: Application.instance, SLOT ("quit ()"))

Al seleccionar esta opcin en el men, la aplicacin se cierra.

Figura: Men sencillo

Submen
Un submen es un men conectado a otro objeto de men. El ejemplo siguiente lo demuestra.
! # / Usr / bin / ruby # ZetCode tutorial de Ruby Qt # # Este programa crea un submen # # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin: 11 2012 requieren de clase 'Qt' QtApp <Qt: :. MainWindow def initialize sper setWindowTitle "Submen" init_ui cambio de tamao 280, 200 se mueven 300, 300 def espectculo final init_ui quit = Qt :: Action.new "& Salir", el archivo self = MenuBar () AgregarMen "& Archivo" IMPM = Qt :: Menu.new "Importar" semillas = Qt :: Action.new "Importar feed de noticias ...", las marcas de auto = Qt :: Action.new "Importar marcadores ...", el correo self = Qt :: Action.new " Importar correo ... ", impm.addAction auto impm.addAction semillas marca impm.addAction correo file.addMenu IMPM file.addAction dejar connect (dejar de fumar, SIGNAL (" disparado () "), Qt :: Application.instance, SLOT ( "quit ()")) end end app = Qt :: Application.new ARGV QtApp.new app.exec

En el ejemplo, tenemos tres opciones en un submen de un men archivo.


archivo = MenuBar (). AgregarMen "& Archivo" IMPM = Qt :: Menu.new "Importar"

Tenemos dos mens objetos. El men de archivos y el men de importacin.

semillas = Qt :: Action.new "news feed Importar ...", las marcas de auto = Qt :: Action.new "Importar marcadores ...", el correo self = Qt :: Action.new "Importar correo ..." , auto

Creamos tres objetos de accin.


impm.addAction impm.addAction semillas marca correo impm.addAction

Aadimos los objetos de accin en el men de importacin.


file.addMenu IMPM

Por ltimo, aadimos el men Importar en el men archivo.

Figura: Submen

Imgenes, mens, separadores


En el ejemplo siguiente, se mejorar an ms nuestra solicitud anterior. Vamos a aadir iconos a los mens, atajos de uso y un separador. Tenga en cuenta que el escritorio Gnome puede ser configurado para no mostrar iconos de men por defecto. En este caso tenemos que habilitar el menu_have_icons opcin en la configuracin de la interfaz Gnome.
gconftool-2 - tipo Boolean - set / desktop / gnome / interface / menus_have_icons Verdadero

Podemos usar el comando anterior o el gconf-editor de la herramienta.

! # / Usr / bin / ruby # ZetCode tutorial de Ruby Qt # # Este programa muestra la imagen # mens, atajos y un separador # # autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin: 11 2012 require 'Qt' clase QtApp <Qt :: MainWindow def initialize sper setWindowTitle "Men Imagen" init_ui cambio de tamao 280, 200 se mueven 300, 300 def espectculo final init_ui newpix = Qt :: Icon.new "new.png" openpix = Qt :: Icon.new " open.png "quitpix = Qt :: Icon.new" exit.png "Newa = Qt :: Action.new newpix," & Nuevo ", self open = Qt :: Action.new openpix," & Abrir ", auto quit = Qt :: Action.new quitpix, "& Salir", quit.setShortcut yo "Ctrl + Q" file = MenuBar (). AgregarMen "& Archivo" file.addAction Newa file.addAction file.addAction file.addSeparator dejar abierta connect (dejar de fumar, SEAL ("activado ()"), Qt :: Application.instance, SLOT ("quit ()")) end end app = Qt :: Application.new ARGV QtApp.new app.exec

En nuestro ejemplo, tenemos un men con tres acciones. Slo la accin de dejar de hacer algo realmente, si lo selecciona. Tambin creamos un separador y un atajo Ctrl + Q, que pondr fin a la aplicacin.
newpix = Qt :: Icon.new "new.png" openpix = Qt :: Icon.new "open.png" quitpix = Qt :: Icon.new "exit.png"

Estas son las imgenes PNG, que utilizaremos en la aplicacin.


Newa = Qt :: Action.new newpix, "& Nuevo", self open = Qt :: Action.new openpix, "& Abrir", auto quit = Qt :: Action.new quitpix, "& Salir", auto

Aqu hemos creado tres objetos de accin. El primer parmetro es el icono .


quit.setShortcut "Ctrl + Q"

Esta lnea crea un acceso directo. Haciendo clic en este acceso directo, vamos a ejecutar la accin para dejar de fumar, que se salga de la aplicacin.
file.addSeparator

Hemos crear un separador. El separador es una lnea horizontal, que nos permite acciones de men de grupo en algunas partes lgicas.

Figura: Imgenes, acceso directo y un separador

Una barra de herramientas


La barra de herramientas de clase proporciona un panel mvil que contiene un conjunto de controles que proporcionan un acceso rpido a las acciones de la aplicacin.
! # / Usr / bin / ruby # ZetCode tutorial de Ruby Qt # # Este programa crea una barra de herramientas # # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin: 11 2012 requieren de clase 'Qt' QtApp <Qt: : MainWindow def initialize sper setWindowTitle "Toolbar" init_ui cambio de tamao 250, 150 se mueven 300, 300 def espectculo final init_ui newpi = Qt :: Icon.new "new2.png" openpi = Qt :: Icon.new "open2.png" quitpi = Qt :: Icon.new "exit2.png" toolbar = addToolBar "main toolbar" toolbar.addAction newpi, "New File" toolbar.addAction openpi, "Abrir archivo" toolbar.addSeparator dejar = toolbar.addAction quitpi, "Deja de aplicacin" connect (dejar de fumar, SIGNAL ("disparado ()"), Qt :: Application.instance, SLOT ("quit ()")) end end app = Qt :: Application.new ARGV QtApp.new app.exec

Creamos una barra de herramientas con tres objetos de accin y un separador.


newpi = Qt :: Icon.new "new2.png" openpi = Qt :: Icon.new "open2.png" quitpi = Qt :: Icon.new "exit2.png"

Objetos de la barra de herramientas de accin mostrar los siguientes iconos.


addToolBar toolbar = "main toolbar"

El addToolBar mtodo de la MainWindow crea una barra de herramientas para la aplicacin. La cadena de texto ofrece una barra de herramientas un nombre. Este nombre se utiliza para hacer referencia a esta barra de herramientas, porque puede haber varias barras de herramientas en una sola aplicacin. Si haga clic derecho en el rea de la ventana, podemos ver una opcin de comprobarse, que muestra / oculta la barra de herramientas.
toolbar.addSeparator

Nosotros creamos un separador vertical.


connect (dejar de fumar, SIGNAL ("disparado ()"), Qt :: Application.instance, SLOT ("quit ()"))

Cuando se hace clic en el objeto de accin para dejar de fumar, la aplicacin termina.

Figura: Barra de herramientas

Deshacer Rehacer
El siguiente ejemplo demuestra, cmo podemos desactivar botones de barra de herramientas en la barra de herramientas. Es una prctica comn en la programacin de GUI. Por ejemplo, el botn Guardar. Si guardar todos los cambios de nuestro documento en el disco, el botn Guardar est desactivado en muchos editores de texto. De esta forma la solicitud indica al usuario, todos los cambios que estn ya registrados.

! # / Usr / bin / ruby # ZetCode Rub Qt tutorial # # Esto deshabilita programas / # permite acciones en una barra de herramientas # # Autor: Jan Bodnar # web: www.zetcode.com # ltima modificacin: 11 2012 requieren de clase 'Qt' QtApp <Qt :: 'count ()' slots MainWindow def initialize sper setWindowTitle "Toolbar" init_ui cambio de tamao 250, 150 se mueven 300, 300 def espectculo final init_ui @ count = 2 undoi = Qt :: Icon.new "undo.png" redoi = Qt :: Icon.new "redo.png" quitpi = Qt :: Icon.new "quit.png" toolbar = addToolBar "primera barra de herramientas" @ und = toolbar.addAction undoi, "Deshacer" @ red = toolbar.addAction redoi "Rehacer" connect @ und, SIGNAL ("disparado ()"), auto, SLOT ("count ()") connect @ red, SIGNAL ("disparado ()"), auto, SLOT ("count ()") toolbar.addSeparator dejar = toolbar.addAction quitpi, "Quit Application" connect para dejar de fumar, SIGNAL ("disparado ()"), Qt :: Application.instance, SLOT ("quit ()") end def accin count = remitente si "Deshacer "== action.text @ @ count = count - 1 else @ @ count = count + 1 end if @ contador <= False End 0@und.setDisabled true@red.setDisabled si @ count> = false 5@und.setDisabled @ red.setDisabled verdadero fin end end app = Qt :: Application.new ARGV QtApp.new app.exec

En nuestro ejemplo, tenemos tres Accin objetos y un separador. Despus de varios clics en los botones de deshacer o rehacer, se convierten en desactivada. Visualmente, los botones aparecen en gris.
@ Count = 2

Los @ conteo determina variables, qu botn se activa y desactiva.


Connect @ und, SIGNAL ("disparado ()"), auto, SLOT ("count ()") connect @ red, SIGNAL ("disparado ()"), auto, SLOT ("count ()")

Al hacer clic en el botn de barra de herramientas, la activa seal es emitida. Unimos esta seal a la cantidad mtodo.
action = remitente

Los dos botones de la barra llame al nmero mtodo. Tenemos que decirle entre ellos. Esta lnea determina que la accin objeto la actualidad se emite la seal.
si "Deshacer" == action.text @ @ count = count - 1 else @ @ count = count + 1 end

El botn de barra de herramientas deshacer resta 1 de la variable de recuento. La redo suma 1. Dependiendo del valor de la variable de recuento, se activar / desactivar los botones de la barra de herramientas.

si @ count <= False End 0@und.setDisabled true@red.setDisabled

El setDisabled mtodo activa o desactiva los botones de la barra de herramientas.

Figura: Deshacer Rehacer

En esta parte del tutorial de Ruby Qt, mencionamos los mens y barras de herramientas.

Dilogos
En esta parte del tutorial de programacin Ruby Qt, vamos a trabajar con cuadros de dilogo. Ventanas de dilogo o cuadros de dilogo son una parte indispensable de la mayora de aplicaciones grficas modernas. Un cuadro de dilogo se define como una conversacin entre dos o ms personas. En una aplicacin informtica un cuadro de dilogo es una ventana que se utiliza para "hablar" con la aplicacin. Un cuadro de dilogo se utiliza para ingresar datos, modificar datos, cambie la configuracin de la aplicacin Dilogos etc son un medio importante de comunicacin entre un usuario y un programa informtico.

Los cuadros de mensaje

Los cuadros de mensaje son cuadros de dilogo convenientes que proporcionan mensajes al usuario de la aplicacin. El mensaje se compone de texto y datos de imagen.
! # / Usr / bin / ruby # ZetCode tutorial de Ruby Qt # # # Este programa muestra los cuadros de dilogo de mensajes # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin: Julio 2009 requieren class 'Qt' QtApp <Qt: : 'showDialog ()' slots Widget def initialize sper setWindowTitle "dilogos de mensajes" init_ui cambiar el tamao de 250, 150, 300 300 se mueven espectculo final def init_ui cuadrcula = Qt :: auto GridLayout.new grid.setSpacing 2 Error = Qt :: PushButton.new "Error", alerta self = Qt :: PushButton.new "Warning", pregunta self = Qt :: PushButton.new "Pregunta", la informacin self = Qt :: PushButton.new "Informacin", self about = Qt :: PushButton . nueva "Acerca de", error grid.addWidget auto, 0, 0 advertencias grid.addWidget, 0, 1 pregunta grid.addWidget, 1, 0 informacin grid.addWidget, 1, 1 sobre grid.addWidget, 2, 0 connect (error , SIGNAL ("clicked ()"), auto, SLOT ("showDialog ()")) connect (advertencia, SIGNAL ("clicked ()"), auto, SLOT ("showDialog ()")) connect (pregunta, SEAL ("clicked ()"), auto, SLOT ("showDialog ()")) connect (informacin, SIGNAL ("clicked ()"), auto, SLOT ("showDialog ()")) connect (aproximadamente, SIGNAL (" clicked () "), yo, SLOT (" showDialog () ")) end def showDialog botn = remitente en caso de" Error "== button.text Qt :: auto MessageBox.critical," Error "," Error al cargar el archivo! " elsif "Warning" == button.text Qt :: auto MessageBox.warning, "Advertencia", "Operation not permitted" elsif "Pregunta" == button.text Qt :: auto MessageBox.question, "Question", "Ests seguro de dejar de fumar?" elsif "Informacin" == button.text Qt :: auto MessageBox.information, "Informacin", "Descarga completa". elsif "Acerca de" Qt :: == button.text auto MessageBox.about, "Acerca de", "Rub ZetCode tutorial Qt." end end end app = Qt :: Application.new ARGV QtApp.new app.exec

Usamos el GridLayout gerente de crear una cuadrcula de cinco botones. Cada uno de los botones muestra un cuadro de mensaje diferente.
si "Error" == button.text Qt :: auto MessageBox.critical, "Error", "Error al cargar archivo"

En caso de que puls el botn de error, se muestra el cuadro de dilogo de error. Utilizamos mtodos estticos de la de mensajes de clase para mostrar los cuadros de mensaje.

InputDialog
El InputDialog clase proporciona un cuadro de dilogo simple conveniencia de obtener un nico valor para el usuario. El valor de entrada puede ser una cadena, un nmero o un elemento de una lista. Una etiqueta debe estar configurado para decirle al usuario lo que debe ingresar.
! # / Usr / bin / ruby # ZetCode tutorial de Ruby Qt # # Este programa muestra un cuadro de dilogo de entrada # # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin: Julio 2009 requieren class 'Qt' QtApp <Qt :: 'showDialog ()' slots Widget def initialize sper setWindowTitle "Entrada de dilogo" init_ui cambio de tamao 400, 80 se mueven 300, 300 def espectculo final init_ui show = Qt :: PushButton.new "Dialog", auto connect (show, SIGNAL (" clicked () "), yo, SLOT (" showDialog () ")) show.move 20, 20 @ edit = Qt :: LineEdit.new self@edit.move 130, 22 Final def showDialog text = Qt :: InputDialog. auto getText, "Dilogo de entrada", "Escriba su nombre" si el texto! name = nil text.strip = si no name.empty? @ Name edit.setText final final final final App = Qt :: Application.new ARGV QtApp.new app.exec

En el ejemplo de cdigo, tenemos un botn y una edicin de lnea. El botn muestra un cuadro de dilogo de entrada. Tenemos un poco de texto y el texto se muestra en el widget de lnea de edicin.
text = Qt :: auto InputDialog.getText, "Dilogo de entrada", "Escriba su nombre"

El getText mtodo esttico crea el dilogo de entrada. El texto del cuadro de dilogo se almacena en la variable de texto.
si el texto! name = nil text.strip = si no name.empty? @ Name edit.setText end end

Antes de actualizar la edicin en lnea, nos aseguramos de que la variable de texto no es nulo y que no est vaco y no se compone slo de espacios.

Figura: dilogo de entrada

ColorDialog
El ColorDialog clase proporciona un widget de dilogo para especificar los colores. La funcin del dilogo de color es permitir a los usuarios elegir los colores.
! # / Usr / bin / ruby # ZetCode tutorial de Ruby Qt # # En este programa, se utiliza el ColorDialog # para cambiar el color de un texto # etiqueta # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin : julio 2009 requieren clase 'Qt' QtApp <Qt :: 'showDialog ()' slots Widget def initialize sper setWindowTitle dilogo "Color" init_ui cambio de tamao 400, 300 se mueven 300, 300 def espectculo final init_ui @ label = Qt :: Label.new "ZetCode Rub Qt tutorial", self vbox = Qt :: VBoxLayout.new self@label.setAlignment Qt :: AlignCenter vbox.addWidget @ end def etiqueta mousePressEvent evento color = Qt :: ColorDialog.getColor si no color.isValid return end @ label.setStyleSheet "QWidget {color:% s}" end end% color.name app = Qt :: Application.new ARGV QtApp.new app.exec

Se muestra un poco de texto en el centro de la ventana. Al hacer clic en el rea de la ventana, se muestra un cuadro de dilogo de color. Cambiamos el color de primer plano del texto con el color seleccionado en el cuadro de dilogo.
def mousePressEvent evento ... final

Para recibir eventos de ratn de prensa para nuestra ventana, hay que reimplementar el mousePressEvent mtodo.
color = Qt :: ColorDialog.getColor

El ColorDialog se est creando. El color seleccionado se almacena en el color de la variable.


@ Label.setStyleSheet "QWidget {color:% s}"% color.name

Aqu actualizamos el color de primer plano del texto de la etiqueta.

Figura: ColorDialog

FontDialog

El FontDialog clase proporciona un widget de dilogo para seleccionar una fuente.


! # / Usr / bin / ruby # ZetCode tutorial de Ruby Qt # # En este programa, se utiliza el FontDialog # para cambiar el tipo de letra de un texto # etiqueta # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin : julio 2009 requieren clase 'Qt' QtApp <Qt :: 'showDialog ()' slots Widget def initialize sper setWindowTitle dilogo "Fuente" init_ui cambio de tamao 400, 300 se mueven 300, 300 def espectculo final init_ui @ label = Qt :: Label.new "ZetCode Rub Qt tutorial", self vbox = Qt :: VBoxLayout.new self@label.setAlignment Qt :: AlignCenter vbox.addWidget @ end def etiqueta mousePressEvent ok event = Qt :: Boolean.new font = Qt :: FontDialog.getFont ok ok si no regreso final end@label.setFont extremo fuente app = Qt :: Application.new ARGV QtApp.new app.exec

Este ejemplo es similar al anterior. Esta vez, cambiar la fuente del texto.
font = Qt :: ok FontDialog.getFont

El FontDialog se est creando.


si no return end ok

El booleano ok variable es true, si hace clic en el botn Aceptar del cuadro de dilogo. Volvemos a partir del mtodo, si el botn Cancelar se presion.
@ Label.setFont fuente

Actualizamos la etiqueta a la fuente que ha seleccionado.

Figura: FontDialog

En esta parte del tutorial de Ruby Qt, trabajamos con ventanas de dilogo.

Pintura
En esta parte del tutorial de programacin Ruby Qt vamos a hacer un poco de pintura. Cuando tenemos que pintar? Hay situaciones, cuando tenemos que crear un widget desde cero. En tal caso, tenemos que hacer la pintura. O queremos crear grficos, adornos especiales, efectos o mejoras widget. El Pintor de clases es fundamental cuando hacemos algo de pintura en la biblioteca Qt. Eventos de pintura son recibidos en el paintEvent mtodo. Para hacer pintura de encargo, tenemos que reimplementar este mtodo.

Patrones

En Qt, hay varios modelos, que podemos utilizar para rellenar el interior de formas.
#!/usr/bin/ruby # # # # # # # # # ZetCode Ruby Qt tutorial This program draws nine rectangles. The interiors are filled with different built-in patterns. author: jan bodnar website: www.zetcode.com last modified: June 2009

require 'Qt' class QtApp < Qt::Widget def initialize super setWindowTitle "Patterns" resize 350, 280 move 300, 300 show end def paintEvent event painter = Qt::Painter.new self drawPatterns painter painter.end end def drawPatterns painter painter.setPen Qt::NoPen painter.setBrush Qt::HorPattern painter.drawRect 10, 15, 90, 60 painter.setBrush Qt::VerPattern painter.drawRect 130, 15, 90, 60 painter.setBrush Qt::CrossPattern painter.drawRect 250, 15, 90, 60 painter.setBrush Qt::Dense7Pattern painter.drawRect 10, 105, 90, 60

painter.setBrush Qt::Dense6Pattern painter.drawRect 130, 105, 90, 60 painter.setBrush Qt::Dense5Pattern painter.drawRect 250, 105, 90, 60 painter.setBrush Qt::BDiagPattern painter.drawRect 10, 195, 90, 60 painter.setBrush Qt::FDiagPattern painter.drawRect 130, 195, 90, 60 painter.setBrush Qt::DiagCrossPattern painter.drawRect 250, 195, 90, 60 end end app = Qt::Application.new ARGV QtApp.new app.exec

In the code example, we will draw nine rectangles and fill them with different brush patterns.
def paintEvent event painter = Qt::Painter.new self drawPatterns painter painter.end end

When the window area needs to be redrawn, the paintEvent method is called. This happens, when we resize the window, maximize it or minimize it etc. Inside this method, we create the Painter object. This object is used to do all painting in Qt. The painting itself is delegated to the drawPatterns method.
painter.setPen Qt::NoPen

The pen object is used to draw outlines of the shapes. In our example we will not use a pen.
painter.setBrush Qt::HorPattern

We set a horizontal pattern as a brush.


painter.drawRect 10, 15, 90, 60

We draw a rectangle, with the current pen and brush. The first two parameters of the method are the x, y coordinates. The last two parameters are the width and height of the rectangle.
painter.end

Ends painting. Any resources used while painting are released.

Figure: Patterns

Shapes
The Qt painting API can draw various shapes. The following programming code example will show some of them.
#!/usr/bin/ruby # # # # # # # ZetCode Ruby Qt tutorial This program draws basic shapes author: jan bodnar website: www.zetcode.com last modified: June 2009

require 'Qt'

class QtApp < Qt::Widget def initialize super setWindowTitle "Basic shapes" resize 350, 280 move 300, 300 show end def paintEvent event painter = Qt::Painter.new self drawShapes painter painter.end end def drawShapes painter painter.setRenderHint Qt::Painter::Antialiasing painter.setPen Qt::Color.new 150, 150, 150 painter.setBrush Qt::Brush.new Qt::Color.new 150, 150, 150 path1 = Qt::PainterPath.new path1.moveTo 5, 5 path1.cubicTo 40, 5, 50, 50, path1.cubicTo 5, 99, 50, 50, painter.drawPath path1 99, 99 5, 5

painter.drawPie 130, 20, 90, 60, 30*16, 120*16 painter.drawChord 240, 30, 90, 60, 0, 16*180 painter.drawRoundRect 20, 120, 80, 50 points = [] points.push points.push points.push points.push points.push Qt::Point.new Qt::Point.new Qt::Point.new Qt::Point.new Qt::Point.new 130, 180, 180, 220, 140, 140 170 140 110 100

polygon = Qt::Polygon.new points painter.drawPolygon polygon painter.drawRect 250, 110, 60, 60 baseline = Qt::PointF.new 20, 250 font = Qt::Font.new "Georgia", 55 path2 = Qt::PainterPath.new

path2.addText baseline, font, "Q" painter.drawPath path2 painter.drawEllipse 140, 200, 60, 60 painter.drawEllipse 240, 200, 90, 60 end end app = Qt::Application.new ARGV QtApp.new app.exec

In this code example, we draw nine different shapes on the window. A complex path, a pie, a chord, a rounded rectangle, a polygon, a rectangle, a character based shape, a circle and an ellipse.
painter.setRenderHint Qt::Painter::Antialiasing

We use antialiasing in the example. Antialiased shapes look better, but it takes more time to draw them.
painter.setPen Qt::Color.new 150, 150, 150 painter.setBrush Qt::Brush.new Qt::Color.new 150, 150, 150

We use a dark gray pen and brush to draw the shapes.


path1 = Qt::PainterPath.new path1.moveTo 5, 5 path1.cubicTo 40, 5, 50, 50, path1.cubicTo 5, 99, 50, 50, painter.drawPath path1 99, 99 5, 5

La forma compleja primero se crea con la PainterPath objeto. La clase PainterPath proporciona un recipiente para operaciones de pintura. Un camino pintor es un objeto compuesto por una serie de bloques de construccin grficos, como rectngulos, elipses, lneas y curvas.
painter.drawPie 130, 20, 90, 60, 30 * 16, 120 * 16 painter.drawChord 240, 30, 90, 60, 0, 16 * 180 painter.drawRoundRect 20, 120, 80, 50

Estas tres lneas dibujar un pastel, una cuerda y un rectngulo redondeado.

puntos = [] points.push Qt :: Point.new 130, 140 points.push Qt :: Point.new 180, 170 points.push Qt :: Point.new 180, 140 points.push Qt :: Point.new 220 , 110 points.push Qt :: Point.new 140, 100 polgono = Qt :: puntos Polygon.new polgono painter.drawPolygon

Nosotros utilizamos una matriz de cinco puntos para crear un polgono.


baseline = Qt :: PointF.new 20, 250 font = Qt :: Font.new "Georgia", 55 path2 = Qt :: PainterPath.new path2.addText lnea de base, la fuente, "Q" painter.drawPath path2

Estas lneas crean una forma basada en caracteres.


painter.drawEllipse 140, 200, 60, 60 painter.drawEllipse 240, 200, 90, 60

Estas dos lneas de crear un crculo y una elipse, respectivamente.

Figura: Formas

Rectngulos transparentes
La transparencia es la cualidad de ser capaz de ver a travs de un material. La manera ms fcil de entender la transparencia es imaginar un trozo de vidrio o el agua. Tcnicamente, los rayos de luz puede pasar a travs del vidrio y de esta manera podemos ver los objetos detrs del vidrio.

En grficos de computadora, podemos lograr efectos de transparencia con la composicin alfa. Composicin alfa es el proceso de combinar una imagen con un fondo para crear la apariencia de una transparencia parcial. El proceso de composicin utiliza un canal alfa. (Wikipedia.org, answers.com)
#! / Usr / bin / ruby # ZetCode tutorial de Ruby Qt # # Este programa se basa Ten # # rectngulos con diferentes niveles de transparencia. # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin: Junio 2009 require 'Qt' clase QtApp <Qt :: Widget def initialize sper setWindowTitle "rectngulos transparentes" cambio de tamao 590, 90 300, 300 se mueven definicin final espectculo paintEvent evento pintor = Qt :: Painter.new auto DrawRectangles pintor painter.end final def DrawRectangles pintor painter.setPen Qt :: nAbrir for i in 1 .. 10 painter.setBrush Qt :: Brush.new Qt :: Color.new 0 , 0, 255, i * 25 * i painter.drawRect 50, 20, 40, 40 end end end app = Qt :: Application.new ARGV QtApp.new app.exec

En el ejemplo que vamos a sacar diez rectngulos con diferentes niveles de transparencia.
painter.setPen Qt::NoPen

No utilizamos pluma.
for i in 1 .. 10 painter.setBrush Qt :: Brush.new Qt :: Color.new 0, 0, 255, i * 25 painter.drawRect 50 * i, 20, 40, 40 final

El ltimo parmetro del objeto Color es el valor de transparencia alfa.

Figura: rectngulos transparentes

Donut Shape

En el siguiente ejemplo se crea una forma compleja por rotacin de un manojo de elipses.
! # / Usr / bin / ruby # ZetCode tutorial de Ruby Qt # # Este programa dibuja un donut forma # # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin: Junio 2009 require 'Qt' clase QtApp <Qt Widget :: def initialize sper setWindowTitle "Donut" resize 350, 280 se mueven 300, 300 def espectculo final paintEvent pintor event = Qt :: Painter.new auto drawDonut pintor painter.end final def drawDonut pintor painter.setRenderHint Qt :: Painter :: Color Antialiasing = Qt :: Color.new color.setNamedColor "# 333333" pen = Qt :: Pen.new colores pen.setWidth 1 painter.setPen pluma w = ancho h = altura painter.translate Qt :: Point.new w / 2, h / 2 72.times hacer painter.drawEllipse -125, -40, 250, 80 painter.rotate 5,0 end end end app = Qt :: Application.new ARGV QtApp.new app.exec

En este ejemplo, creamos un donut. La forma se asemeja a una galleta, de ah el nombre de donut.
color = Qt :: Color.new color.setNamedColor "# 333333"

Podemos utilizar una notacin hexadecimal para crear un objeto de color.


w = ancho h = altura

Aqu se determina la anchura y la altura de la ventana.


painter.translate Qt :: Point.new w / 2, h / 2

Nos mover el sistema de coordenadas para el centro de la ventana. De esta manera hacemos el dibujo matemticamente ms fcil.
72.times hacer painter.drawEllipse -125, -40, 250, 80 painter.rotate final 5,0

Dibujamos un objeto elipse 72 veces. Cada vez que gire la elipse en 5 grados. Esto crear nuestra forma de rosquilla.

Figura: Donut

Dibujar texto
En el ltimo ejemplo, vamos a dibujar texto en la ventana.
! # / Usr / bin / ruby # ZetCode tutorial de Ruby Qt # # Este programa dibuja texto en la ventana # # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin: Junio 2009 requieren class 'Qt' QtApp < Qt :: Widget def initialize sper setWindowTitle "Soulmate" resize 370, 240 se mueven 300, 300 def espectculo final paintEvent evento pintor = Qt :: Painter.new auto drawText pintor painter.end final def drawText pintor painter.setBrush Qt :: Brush. nuevo Qt :: Color.new 25, 25, 25 painter.setFont Qt :: Font.new "Purisa", 10 painter.drawText Qt :: Point.new (20, 30), "La mayora de las relaciones parecen tan transitorio" pintor. drawText Qt :: Point.new (20, 60): "Son buenos, pero no el permanente" painter.drawText Qt :: Point.new (20, 120), "Quin no dura para alguien a quien abrazar" painter.drawText Qt :: Point.new (20, 150): "Quin sabe amar sin ser dicho" painter.drawText Qt :: Point.new (20, 180), "Que alguien me diga por qu estoy en mi propio "painter.drawText Qt :: Point.new (20, 210):" Si hay un alma gemela para cada uno "end end app = Qt :: Application.new ARGV QtApp.new app.exec

Trazamos una letra de la cancin en la ventana.


painter.setFont Qt :: Font.new "Purisa", 10

Hemos creado una fuente Purisa para nuestro texto.


painter.drawText Qt :: Point.new (20, 30), "La mayora de las relaciones parecen tan transitorio"

El drawText mtodo se utiliza para dibujar el texto.

Figura: texto Dibujo

En esta parte del tutorial de programacin Ruby Qt, hicimos un poco de pintura.

Custom Widget
En esta parte del tutorial de programacin Ruby Qt, vamos a crear un widget personalizado. Toolkits slo suelen proporcionar los widgets ms comunes como botones, widgets de texto, barras de desplazamiento, etc No toolkit puede proporcionar todos los controles posibles. Los programadores deben crear widgets tales por s mismos. Lo hacen mediante el uso de las herramientas de dibujo que proporciona el conjunto

de herramientas. Hay dos posibilidades. Un programador puede modificar o mejorar un widget existente. O puede crear un widget personalizado desde cero.

El widget Burning
En el siguiente ejemplo, vamos a crear un widget quema personalizado. Este control puede verse en aplicaciones como Nero o K3B. El widget se puede crear a partir de cero.
#!/usr/bin/ruby # ZetCode Ruby Qt tutorial # # # # # # In this program, we create a custom widget @author jan bodnar website zetcode.com last modified July 2009

require 'Qt' PANEL_HEIGHT = 30 DISTANCE = 19 LINE_WIDTH = 5 DIVISIONS = 10 FULL_CAPACITY = 700 MAX_CAPACITY = 750 class Burning < Qt::Widget def initialize(parent) super(parent) @num = [ "75", "150", "225", "300", "375", "450", "525", "600", "675" ] @redColor = Qt::Color.new 255, 175, 175 @yellowColor = Qt::Color.new 255, 255, 184 @parent = parent setMinimumHeight PANEL_HEIGHT end def paintEvent event

painter = Qt::Painter.new self drawWidget painter painter.end end def drawWidget painter w = width.to_f slid_width = @parent.getCurrentWidth step = (w / DIVISIONS).round.to_f till = ((w / MAX_CAPACITY) * slid_width).to_f full = ((w / MAX_CAPACITY) * FULL_CAPACITY).to_f if slid_width > FULL_CAPACITY painter.setPen @yellowColor painter.setBrush Qt::Brush.new @yellowColor painter.drawRect Qt::RectF.new 0, 0, full, PANEL_HEIGHT painter.setPen @redColor painter.setBrush Qt::Brush.new @redColor painter.drawRect Qt::RectF.new full+1, 0, till-full, PANEL_HEIGHT else if slid_width > 0 painter.setPen @yellowColor painter.setBrush Qt::Brush.new @yellowColor painter.drawRect Qt::RectF.new 0, 0, till, PANEL_HEIGHT end end painter.setPen Qt::Color.new 90, 90, 90 painter.setBrush Qt::NoBrush painter.drawRect 0, 0, w-1, PANEL_HEIGHT-1 newFont = font newFont.setPointSize 7 painter.setFont newFont for i in (1..@num.length) painter.drawLine Qt::LineF.new i*step, 1, i*step, LINE_WIDTH metrics = Qt::FontMetrics.new newFont w = metrics.width @num[i-1] painter.drawText(Qt::PointF.new(i*step-w/2, DISTANCE), @num[i-1]) end end end

class QtApp < Qt::Widget slots 'onChanged(int)' def initialize super setWindowTitle "The Burning Widget" initUI resize 370, 200 move 300, 300 show end def initUI @cur_width = 0 @slider = Qt::Slider.new Qt::Horizontal , self @slider.setMaximum MAX_CAPACITY @slider.setGeometry 50, 50, 130, 30 connect(@slider, SIGNAL("valueChanged(int)"), self, SLOT("onChanged(int)")) vbox = Qt::VBoxLayout.new self hbox = Qt::HBoxLayout.new vbox.addStretch 1 @widget = Burning.new self hbox.addWidget @widget, 0 vbox.addLayout hbox setLayout vbox end def onChanged val @cur_width = val @widget.repaint end def getCurrentWidth return @cur_width end end app = Qt::Application.new ARGV QtApp.new app.exec

In this file, we create the Burning widget.


class Burning < Qt::Widget

The custom widget is based on the Widget widget.


PANEL_HEIGHT = 30 DISTANCE = 19 LINE_WIDTH = 5 DIVISIONS = 10 FULL_CAPACITY = 700 MAX_CAPACITY = 750

These are important constants. The PANEL_HEIGHT defines the height for the custom widget. The DISTANCE is the distance of the numbers on the scale from the top of their parent border. The LINE_WIDTH is the vertical line width. The DIVISIONS is the number of parts of the scale. The FULL_CAPACITY is the maximum capacity of the media. After it is reached, overburning happens. This is visualized by a red color. The MAX_CAPACITY is the maximum capacity of a medium.
@num = [ "75", "150", "225", "300", "375", "450", "525", "600", "675" ]

We use these numbers to build the scale of the Burning widget.


def paintEvent event painter = Qt::Painter.new self drawWidget painter painter.end end

The drawing of the custom widget is delegated to the drawWidget method.


slid_width = @parent.getCurrentWidth

We use it to get the currently selected slider value.


w = width.to_f

We get the width of the widget. The width of the custom widget is dynamic. It can be resized by a user.

till = ((w / MAX_CAPACITY) * slid_width).to_f full = ((w / MAX_CAPACITY) * FULL_CAPACITY).to_f

We use the w variable to do the transformations. Between the values of the scale and the custom widget's measures. Note that we use floating point values. We get greater precision in drawing.
painter.setPen @ redcolor painter.setBrush Qt :: Brush.new @ redcolor painter.drawRect Qt :: RectF.new completo +1, 0, hasta que llena, PANEL_HEIGHT

Estas tres lneas de dibujar el rectngulo rojo, lo que indica la grabacin de tamao extra.
painter.drawRect 0, 0, w-1, PANEL_HEIGHT-1

Este es el permetro del widget. El rectngulo exterior.


painter.drawLine Qt :: LineF.new i * step, 1, i * paso, line_width

Aqu trazamos las lneas verticales pequeos.


w = metrics.width @ num [i-1] painter.drawText (Qt :: PointF.new (i * step-w / 2, distancia), @ num [i-1])

Aqu nos basamos en los nmeros de la escala. Para colocar con precisin los nmeros, debemos obtener el ancho de la cadena.
@ Widget = Burning.new auto hbox.addWidget @ widget, 0

Creamos la instancia del widget Burning y agregarlo a la caja horizontal.


def onChanged @ val = cur_width val@widget.repaint final

Cuando el valor de la barra cambia, la almacenamos en el interior del cur_width @ variable y volver a pintar el widget personalizado.
def volver getCurrentWidth @ end cur_width

Este mtodo es llamado por el widget personalizado para obtener el valor del control deslizante actual.

Figura: El widget Burning

En esta parte del tutorial de Ruby Qt, hemos demostrado cmo crear un widget personalizado.

Nibbles
En esta parte del tutorial de programacin Ruby Qt, vamos a crear un clon juego Nibbles. Nibbles es un juego antiguo video clsico. Fue creado por primera vez en aos 70. Ms tarde fue llevado a los PC. En este juego el jugador controla una serpiente. El objetivo es comer tantas manzanas como sea posible. Cada vez que la serpiente se come una manzana, su cuerpo crece. La serpiente se deben evitar las paredes y su propio cuerpo.

Desarrollo
El tamao de cada una de las articulaciones de una serpiente es 10px. La serpiente se controla con las teclas de cursor. Inicialmente, la serpiente tiene tres

articulaciones. El juego comienza inmediatamente. Cuando el juego termina, se muestra "Game Over" mensaje en el centro de la ventana. Board.rb
ANCHO ALTURA = 300 = 300 = 10 DOT_SIZE ALL_DOTS = ancho * altura / (* DOT_SIZE DOT_SIZE) RAND_POS DELAY = 29 = 140 $ x = [0] * ALL_DOTS $ y = [0] * ALL_DOTS clase general <Qt :: Widget def initialize (padre) super (padre) setFocusPolicy Qt :: StrongFocus initGame final def initGame @ left = false @ @ = true derecha hasta abajo = false = false @ @ @ ingame = true puntos = 3 = begin @ baln Qt :: Imagen. nuevo "dot.png" @ manzana = Qt :: Image.new "apple.png" @ cabeza = Qt :: Image.new "head.png" rescate pone "no se puede cargar imgenes" end for i in (0 .. @ puntos) $ x [i] = 50 - i * 10 $ y [i] = 50 setStyleSheet final locateApple "QWidget {background-color: # 000000}" @ timer = Qt :: BasicTimer.new @ timer.start (140, auto) end def paintEvent evento pintor = Qt :: Painter.new auto painter.begin si @ ingame drawObjects pintor pintor ms GameOver final painter.end final def drawObjects pintor painter.drawImage apple_x @, @ apple_y, @ manzana para z en (0 @ .. puntos) si z == 0 painter.drawImage $ x [z], $ y [z], @ cabeza ms painter.drawImage $ x [z], $ y [z], @ baln end end end def gameover pintor msg = "Game Over" pequeo = Qt :: Font.new "Helvetica", 12, Qt :: Fuentes :: Bold.value metr = Qt :: FontMetrics.new pequeo textWidth = metr.width msj h = altura w = ancho painter.setPen Qt Qt :: :: Color.new blanco painter.setFont pequeo painter.translate Qt :: Point.new w / 2, h / 2 painter.drawText-textWidth / 2, 0, final msj checkApple def si $ x [0] == @ apple_x y $ y [0] == @ @ apple_y puntos = @ + 1 puntos finales locateApple final del desplazamiento def z = @ puntos, mientras que z> 0 $ x [z] = $ x [(z - 1)] $ y [z] = $ y [(z - 1)] z = z - 1 end if @ dej $ x [0] - = DOT_SIZE extremo derecho si @ $ x [0] + = DOT_SIZE final si @ hasta $ y [0] - = DOT_SIZE final si @ $ y abajo [0] + = DOT_SIZE end end def checkCollision z = @ puntos, mientras que z> 0 si z> 4 y $ x [0] == $ x [z] y $ y [0] == $ y [z] @ ingame = False End z = z - 1 End If $ y [0]> ALTURA @ ingame = False End If $ y [0] <0 @ ingame = False End si $ x [0]> ANCHO @ ingame = False End If $ x [0] <0 @ ingame = False End final locateApple def r = rand RAND_POS @ apple_x = r * r = rand DOT_SIZE RAND_POS @ apple_y = r * Final DOT_SIZE def TimerEvent evento dentro del juego si @ checkCollision checkApple final del desplazamiento else@timer.stop repintar final def keyPressEvent evento clave = event.key si key == Qt :: Key_Left.value y no @ @ izquierda derecha = true up = @ @ = false abajo False End If key == Qt :: Key_Right.value y no @ @ izquierda derecha = true @ @ = false hasta abajo = False End If key == Qt :: Key_Up.value y no por @ @ hasta = @ = true derecho @ falso izquierda = False End If key == Qt :: Key_Down.value y no a @ @ @ = true abajo a la derecha = false @ left = false end end end

En primer lugar vamos a definir algunas constantes que se utilizan en nuestro juego.

Los ANCHO y ALTURA constantes de determinar el tamao de la Junta. El DOT_SIZE es el tamao de la manzana y el punto de la serpiente. El ALL_DOTS Define el nmero mximo de puntos posibles en el Consejo. El RAND_POS constante se usa para calcular una posicin aleatoria de una manzana. La DELAY constante determina la velocidad del juego.
$ X = [0] * ALL_DOTS $ y = [0] * ALL_DOTS

Estos dos conjuntos x tienda, y las coordenadas de todas las articulaciones posibles de una serpiente. El initGame mtodo inicializa variables, imgenes cargas e inicia una funcin de tiempo de espera.
si @ ingame drawObjects pintor otro extremo GameOver pintor

Dentro de la paintEvent mtodo, comprobamos el @ ingame variable. Si bien es cierto, nos basamos nuestros objetos. La manzana y las articulaciones de serpiente. De lo contrario, mostrar el mensaje "Game over" de texto.
def drawObjects pintor painter.drawImage @ apple_x, apple_y @, @ manzana para z en (0 .. @ puntos) si z == 0 painter.drawImage $ x [z], $ y [z], @ cabeza ms painter.drawImage $ x [z], $ y [z], @ end end end pelota

El drawObjects mtodo dibuja la manzana y las articulaciones de la serpiente. La articulacin de la primera de una serpiente es su cabeza, que est representado por un crculo rojo.
def checkApple si $ x [0] == @ apple_x y $ y [0] == @ @ apple_y puntos = @ dots + 1 end end locateApple

Los checkApple mtodo comprueba si la serpiente ha golpeado el objeto de manzana. Si es as, agregamos otra articulacin serpiente y llamar a la locateApple mtodo, que coloca al azar un nuevo objeto de manzana. En el movimiento mtodo que tenemos el algoritmo de clave del juego. Para entenderlo, observar cmo la serpiente se mueve. Usted controla la cabeza de la serpiente. Usted puede cambiar su direccin con las teclas de cursor. El resto de las

articulaciones se mueven una posicin hacia arriba de la cadena. Las segundas jugadas conjuntas en las que la primera es la articulacin tercero en la segunda, etc
mientras que z> 0 $ x [z] = $ x final de 1 - [(z - 1)] $ y [z] = $ y [(z - 1)] z = z

Este cdigo mueve las articulaciones de la cadena.


si @ dej $ x [0] - = fin DOT_SIZE

Mueva la cabeza hacia la izquierda. En el checkCollision mtodo, se determina si la serpiente ha afectado a s mismo o una de las paredes.
mientras que z> 0 si z> 4 y $ x [0] == $ x [z] y $ y [0] == $ y [z] @ ingame = False End z = z - 1 final

Termina el juego, si la serpiente golpea a uno de sus articulaciones con la cabeza.


si $ y [0]> ALTURA @ ingame = False End

Termina el juego, si la serpiente llega a la parte inferior de la Junta. El locateApple mtodo localiza una manzana al azar en el tablero.
r = rand RAND_POS

Obtenemos un nmero aleatorio entre 0 y RAND_POS - 1.


@ Apple_x = r * DOT_SIZE ... @ Apple_y = r * DOT_SIZE

Estas lneas ajustar la coordenadas x, y del objeto de la manzana.


si @ ingame checkCollision checkApple movimiento final else@timer.stop

Cada ms 140, el TimerEvent mtodo se llama. Si estamos en el juego, que llamamos tres mtodos, que se basan la lgica del juego. De lo contrario, detener el temporizador. En el keyPressEvent mtodo de la clase Board, podemos determinar las teclas que fueron presionadas.

si key == Qt :: Key_Left.value y no @ @ izquierda derecha = true @ @ = false hasta abajo = False End

Si se pulsa la tecla de cursor hacia la izquierda, nos propusimos @ izquierdo en true. Esta variable se usa en el movimiento mtodo para cambiar las coordenadas del objeto de serpiente. Ntese tambin, que cuando la serpiente se dirige a la derecha, no podemos girar inmediatamente a la izquierda. Nibbles.rb
#! / Usr / bin / ruby # ZetCode Rub tutorial Qt # # En este programa, se crea un clon # juego Nibbles. # # Autor: Jan sitio web Bodnar #: # www.zetcode.com ltima modificacin: 09 2012 require 'Qt' require 'Junta' clase QtApp <Qt :: MainWindow def initialize sper setWindowTitle "Nibbles" setCentralWidget Board.new (self) resize 310, 310 se mueven 300, 300 final App Show final = Qt :: Application.new ARGV QtApp.new app.exec

En el archivo Nibbles.rb, hemos creado el juego Nibbles.

Figura: Nibbles

Este fue el juego de ordenador Nibbles programado con la biblioteca Qt y el lenguaje de programacin Ruby.

Potrebbero piacerti anche