|
@@ -28,11 +28,11 @@ Antes de llegar al laboratorio debes:
|
28
|
28
|
|
29
|
29
|
1. Haber repasado los siguientes conceptos:
|
30
|
30
|
|
31
|
|
- a. creación de objetos de una clase.
|
|
31
|
+ a. creación de objetos de una clase.
|
32
|
32
|
|
33
|
|
- b. utilización de métodos "getters" para acceder a los atributos de un objeto.
|
|
33
|
+ b. utilización de métodos "getters" para acceder a los atributos de un objeto.
|
34
|
34
|
|
35
|
|
- c. utilización de métodos "setters" para modificar los atributos de un objeto.
|
|
35
|
+ c. utilización de métodos "setters" para modificar los atributos de un objeto.
|
36
|
36
|
|
37
|
37
|
2. Haber estudiado la documentación de la clase `Bird` disponible en [este enlace] (http://ada.uprrp.edu/~ranazario/bird-html/class_bird.html).
|
38
|
38
|
|
|
@@ -66,7 +66,7 @@ Lo siguiente es el esqueleto de la declaración de una clase:
|
66
|
66
|
|
67
|
67
|
---
|
68
|
68
|
|
69
|
|
-```
|
|
69
|
+```cpp
|
70
|
70
|
class NombreClase
|
71
|
71
|
{
|
72
|
72
|
// Declaraciones
|
|
@@ -107,7 +107,7 @@ Los métodos de una clase determinan qué acciones podemos tomar sobre los objet
|
107
|
107
|
---
|
108
|
108
|
|
109
|
109
|
|
110
|
|
-```
|
|
110
|
+```cpp
|
111
|
111
|
class Bird : public QWidget
|
112
|
112
|
{
|
113
|
113
|
.
|
|
@@ -165,21 +165,29 @@ El encabezado de la función será algo así:
|
165
|
165
|
|
166
|
166
|
La clase `Bird` que estarás usando en la sesión de hoy tiene dos constructores (funciones sobrecargadas):
|
167
|
167
|
|
168
|
|
-`Bird (QWidget *parent=0)`
|
|
168
|
+```cpp
|
|
169
|
+Bird (QWidget *parent=0)`
|
|
170
|
+```
|
169
|
171
|
|
170
|
|
-`Bird (int, EyeBrowType, QString, QString, QWidget *parent=0)`
|
|
172
|
+```cpp
|
|
173
|
+Bird (int, EyeBrowType, QString, QString, QWidget *parent=0)
|
|
174
|
+```
|
171
|
175
|
|
172
|
176
|
Puedes ver las declaraciones de los prototipos de estos métodos en la declaración de la clase `Bird` en el archivo `bird.h` del proyecto. La documentación se encuentra en http://ada.uprrp.edu/~ranazario/bird-html/class_bird.html. El primer constructor, `Bird (QWidget *parent=0)`, es un método que se puede invocar con uno o ningún argumento. Si al invocarlo no se usa argumento, el parámetro de la función toma el valor 0.
|
173
|
177
|
|
174
|
178
|
El constructor de una clase que se puede invocar sin usar argumentos es el *constructor* "*default*" de la clase; esto es, el constructor que se invoca cuando creamos un objeto usando una instrucción como:
|
175
|
179
|
|
176
|
|
-`Bird pitirre;`
|
|
180
|
+```cpp
|
|
181
|
+Bird pitirre;
|
|
182
|
+```
|
177
|
183
|
|
178
|
184
|
Puedes ver las implementaciones de los métodos de la clase Birden el archivo `bird.cpp`. Nota que el primer constructor, `Bird (QWidget *parent=0)`, asignará valores aleatorios ("random") a cada uno de los atributos del objeto. Más adelante hay una breve explicación de la función `randInt`.
|
179
|
185
|
|
180
|
186
|
Dale un vistazo a la documentación del segundo constructor, `Bird (int, EyeBrowType, QString, QString, QWidget *parent=0)`. Esta función requiere cuatro argumentos y tiene un quinto argumento que es opcional porque tiene un valor por defecto. Una manera para usar este constructor es creando un objeto como el siguiente:
|
181
|
187
|
|
182
|
|
-`Bird guaraguao(200, Bird::UPSET, "blue", "red");`
|
|
188
|
+```cpp
|
|
189
|
+Bird guaraguao(200, Bird::UPSET, "blue", "red");
|
|
190
|
+```
|
183
|
191
|
|
184
|
192
|
|
185
|
193
|
####"Setters" ("mutators")
|
|
@@ -194,7 +202,7 @@ Las clases proveen métodos para modificar los valores de los atributos de un ob
|
194
|
202
|
|
195
|
203
|
Puedes ver las declaraciones de los métodos en la Figura 1 y en la declaración de la clase `Bird` en `bird.h`, y la implementación de algunos de los métodos en `bird.cpp`. El código en el siguiente ejemplo crea el objeto `bobo` de la clase `Bird` y luego cambia su tamaño a 333.
|
196
|
204
|
|
197
|
|
-```
|
|
205
|
+```cpp
|
198
|
206
|
Bird bobo;
|
199
|
207
|
bobo.setSize(333);
|
200
|
208
|
```
|
|
@@ -212,7 +220,7 @@ Las clases también proveen métodos para acceder ("get") el valor del atributo
|
212
|
220
|
|
213
|
221
|
Puedes ver las declaraciones de los métodos en la Figura 1 y en la declaración de la clase `Bird` en `bird.h`, y las implementaciones de algunos de métodos en `bird.cpp`. El código en el siguiente ejemplo crea el objeto `piolin` de la clase `Bird` e imprime su tamaño.
|
214
|
222
|
|
215
|
|
-```
|
|
223
|
+```cpp
|
216
|
224
|
Bird piolin;
|
217
|
225
|
cout << piolin.getSize();
|
218
|
226
|
```
|
|
@@ -221,15 +229,19 @@ cout << piolin.getSize();
|
221
|
229
|
|
222
|
230
|
**MainWindow:** El archivo `mainwindow.h` contiene la declaración de una clase llamada `MainWindow`. Los objetos que sean instancias de esta clase podrán utilizar los métodos sobrecargados
|
223
|
231
|
|
224
|
|
-`void MainWindow::addBird(int x, int y, Bird &b)`
|
|
232
|
+```cpp
|
|
233
|
+void MainWindow::addBird(int x, int y, Bird &b)
|
|
234
|
+```
|
225
|
235
|
|
226
|
|
-`void MainWindow::addBird(Bird &b)`
|
|
236
|
+```cpp
|
|
237
|
+void MainWindow::addBird(Bird &b)`
|
|
238
|
+```
|
227
|
239
|
|
228
|
240
|
que añadirán a la pantalla un dibujo del objeto de la clase `Bird` que es recibido como argumento. El código en el siguiente ejemplo crea un objeto `w` de la clase `MainWindow`, crea un objeto `zumbador` de la clase `Bird` y lo añade a la posición (200,200) de la pantalla `w` usando el primer método.
|
229
|
241
|
|
230
|
242
|
|
231
|
243
|
|
232
|
|
-```
|
|
244
|
+```cpp
|
233
|
245
|
MainWindow w;
|
234
|
246
|
Bird zumbador;
|
235
|
247
|
w.addBird(200,200,zumbador);
|
|
@@ -252,12 +264,24 @@ w.addBird(200,200,zumbador);
|
252
|
264
|
|
253
|
265
|
**randInt:** La clase `Bird` incluye el método
|
254
|
266
|
|
255
|
|
-`int Bird::randInt(int min, int max)`
|
|
267
|
+```cpp
|
|
268
|
+int Bird::randInt(int min, int max)
|
|
269
|
+```
|
256
|
270
|
|
257
|
271
|
para generar números enteros aleatorios ("random") en el rango [min, max]. El método `randInt` depende de otra función para generar números aleatorios que requiere un primer elemento o *semilla* para ser evaluada. En este proyecto, ese primer elemento se genera con la invocación `srand(time(NULL)) ;`.
|
258
|
272
|
|
259
|
273
|
|
260
|
274
|
|
|
275
|
+!INCLUDE "../../eip-diagnostic/birds-objects/es/diag-birds-objects-01.html"
|
|
276
|
+
|
|
277
|
+!INCLUDE "../../eip-diagnostic/birds-objects/es/diag-birds-objects-02.html"
|
|
278
|
+
|
|
279
|
+!INCLUDE "../../eip-diagnostic/birds-objects/es/diag-birds-objects-03.html"
|
|
280
|
+
|
|
281
|
+!INCLUDE "../../eip-diagnostic/birds-objects/es/diag-birds-objects-04.html"
|
|
282
|
+
|
|
283
|
+!INCLUDE "../../eip-diagnostic/birds-objects/es/diag-birds-objects-05.html"
|
|
284
|
+
|
261
|
285
|
---
|
262
|
286
|
|
263
|
287
|
---
|
|
@@ -279,15 +303,15 @@ En este ejercicio te familiarizarás con la clase `Bird` y con algunos métodos
|
279
|
303
|
|
280
|
304
|
3. En el archivo `main.cpp` (en Sources) la función `main` hace lo siguiente:
|
281
|
305
|
|
282
|
|
- a. Crea un objeto aplicación de Qt, llamado `a`. Lo único que necesitas saber sobre este objeto es que gracias a él es que podemos crear una aplicación gráfica en Qt e interaccionar con ella.
|
|
306
|
+ a. Crea un objeto aplicación de Qt, llamado `a`. Lo único que necesitas saber sobre este objeto es que gracias a él es que podemos crear una aplicación gráfica en Qt e interaccionar con ella.
|
283
|
307
|
|
284
|
|
- b. Crea un objeto de la clase MainWindow llamado `w`. Este objeto corresponde a la ventana que verás cuando corras la aplicación.
|
|
308
|
+ b. Crea un objeto de la clase MainWindow llamado `w`. Este objeto corresponde a la ventana que verás cuando corras la aplicación.
|
285
|
309
|
|
286
|
|
- c. Inicializa la semilla del generador de números aleatorios de Qt. Esto hará que los pájaros nuevos tengan tamaños, colores y cejas aleatorias (a menos que los forcemos a tener valores específicos).
|
|
310
|
+ c. Inicializa la semilla del generador de números aleatorios de Qt. Esto hará que los pájaros nuevos tengan tamaños, colores y cejas aleatorias (a menos que los forcemos a tener valores específicos).
|
287
|
311
|
|
288
|
|
- d. Invoca el método `show()` al objeto `w`. Esto logra que se muestre la ventana donde se desplegarán los resultados.
|
|
312
|
+ d. Invoca el método `show()` al objeto `w`. Esto logra que se muestre la ventana donde se desplegarán los resultados.
|
289
|
313
|
|
290
|
|
- e. En los programas que no tienen interfaz gráfica, la función `main()` usualmente termina con la instrucción `return 0;`. En este proyecto se utiliza la instrucción `return a.exec();` para que el objeto `a` se haga cargo de la aplicación a partir de ese momento.
|
|
314
|
+ e. En los programas que no tienen interfaz gráfica, la función `main()` usualmente termina con la instrucción `return 0;`. En este proyecto se utiliza la instrucción `return a.exec();` para que el objeto `a` se haga cargo de la aplicación a partir de ese momento.
|
291
|
315
|
|
292
|
316
|
4. Ejecuta el programa marcando la flecha verde en el menú de la izquierda de la ventana de Qt Creator. El programa debe mostrar una ventana blanca.
|
293
|
317
|
|
|
@@ -303,37 +327,34 @@ En este ejercicio crearás objetos del tipo `Bird` usando el constructor por def
|
303
|
327
|
|
304
|
328
|
3. Utiliza los "setters" `setSize(int size)`, `setFaceColor(Qstring color)`, `setEyeColor(Qstring color)`, y `setEyebrow(EyeBrowType)` para que `abelardo` luzca como en la Figura 2 (su size es 200).
|
305
|
329
|
|
306
|
|
-
|
307
|
|
- ---
|
308
|
|
-
|
309
|
|
- ![figure2.png](images/figure2.png)
|
|
330
|
+ ---
|
310
|
331
|
|
311
|
|
- **Figura 2.** Abelardo.
|
|
332
|
+ ![figure2.png](images/figure2.png)
|
312
|
333
|
|
313
|
|
- ---
|
|
334
|
+ **Figura 2.** Abelardo.
|
314
|
335
|
|
|
336
|
+ ---
|
315
|
337
|
|
316
|
338
|
4. Crea otro objeto de la clase Bird llamado `piolin` que tenga cara azul, ojos verdes, y cejas UNI invocando el constructor `Bird(int size, EyeBrowType brow, QString faceColor, QString eyeColor, QWidget *parent = 0)`. Su tamaño debe ser la mitad que el de `abelardo`. Añádelo a la misma ventana donde se muestra a `abelardo` usando `w.addBird(300, 100, piolin)` para obtener una imagen como la que se muestra en la Figura 3
|
317
|
339
|
|
|
340
|
+ ---
|
318
|
341
|
|
319
|
|
- ---
|
320
|
|
-
|
321
|
|
- ![figure3.png](images/figure3.png)
|
|
342
|
+ ![figure3.png](images/figure3.png)
|
322
|
343
|
|
323
|
|
- **Figura 3.** Abelardo y Piolin.
|
324
|
|
-
|
325
|
|
- ---
|
|
344
|
+ **Figura 3.** Abelardo y Piolin.
|
326
|
345
|
|
|
346
|
+ ---
|
|
347
|
+
|
327
|
348
|
5. Crea otros dos objetos llamados `juana` y `alondra` que salgan dibujados en las coordenadas (100, 300) y (300,300) respectivamente. Crea a `juana` usando el constructor por defecto para que sus propiedades sean asignadas de forma aleatoria.
|
328
|
349
|
Luego crea a `alondra` usando el otro constructor (el que recibe argumentos) para que puedas especificar sus propiedades durante su creación. `alondra` debe ser igual de grande que `juana`, tener el mismo tipo de cejas, y el mismo color de ojos. Su cara debe ser blanca. Añade a `alondra` y a `juana` a la misma ventana de `abelardo` y `piolin`. La ventana debe ser similar a la de la Figura 4.
|
329
|
350
|
|
330
|
|
- ---
|
|
351
|
+ ---
|
331
|
352
|
|
332
|
|
- ![figure4.png](images/figure4.png)
|
|
353
|
+ ![figure4.png](images/figure4.png)
|
333
|
354
|
|
334
|
|
- **Figura 4.** Abelardo, Piolín, Juana y Alondra.
|
|
355
|
+ **Figura 4.** Abelardo, Piolín, Juana y Alondra.
|
335
|
356
|
|
336
|
|
- ---
|
|
357
|
+ ---
|
337
|
358
|
|
338
|
359
|
6. Corre varias veces el programa para asegurarte que `alondra` y `juana` siguen pareciéndose en tamaño, cejas y ojos.
|
339
|
360
|
|
|
@@ -394,11 +415,11 @@ Before the lab session each student should have:
|
394
|
415
|
|
395
|
416
|
1. Reviewed the following concepts:
|
396
|
417
|
|
397
|
|
- a. the creation of objects of a class.
|
|
418
|
+ a. the creation of objects of a class.
|
398
|
419
|
|
399
|
|
- b. using the "getter" method functions to access the attributes of an object.
|
|
420
|
+ b. using the "getter" method functions to access the attributes of an object.
|
400
|
421
|
|
401
|
|
- c. using the "setter" method functions to modify the attributes of an object.
|
|
422
|
+ c. using the "setter" method functions to modify the attributes of an object.
|
402
|
423
|
|
403
|
424
|
2. Studied the documentation for the class `Bird` available in [this link.](http://ada.uprrp.edu/~ranazario/bird-html/class_bird.html)
|
404
|
425
|
|
|
@@ -429,7 +450,7 @@ The following is the skeleton of the declaration of a class:
|
429
|
450
|
|
430
|
451
|
---
|
431
|
452
|
|
432
|
|
-```
|
|
453
|
+```cpp
|
433
|
454
|
class ClassName
|
434
|
455
|
{
|
435
|
456
|
// Declarations
|
|
@@ -470,7 +491,7 @@ The methods of a class determine the actions that we can take on the objects of
|
470
|
491
|
---
|
471
|
492
|
|
472
|
493
|
|
473
|
|
-```
|
|
494
|
+```cpp
|
474
|
495
|
class Bird : public QWidget
|
475
|
496
|
{
|
476
|
497
|
.
|
|
@@ -530,22 +551,29 @@ The function header will be like this:
|
530
|
551
|
|
531
|
552
|
The class `Bird` that you will be using in today's session has two constructors (overloaded functions):
|
532
|
553
|
|
533
|
|
-`Bird (QWidget *parent=0)`
|
|
554
|
+```cpp
|
|
555
|
+Bird (QWidget *parent=0)
|
|
556
|
+```
|
534
|
557
|
|
535
|
|
-`Bird (int, EyeBrowType, QString, QString, QWidget *parent=0)`
|
|
558
|
+```cpp
|
|
559
|
+Bird (int, EyeBrowType, QString, QString, QWidget *parent=0)
|
|
560
|
+```
|
536
|
561
|
|
537
|
562
|
You can see the declarations of the method prototypes in the declaration of the `Bird` class in the project's `bird.h` file. The documentation can be found in [this link.](http://ada.uprrp.edu/~ranazario/bird-html/class_bird.html) The first constructor, `Bird (QWidget *parent=0)`, is a method that can be invoked with one or no argument. If no argument is used, the function's parameter has a value of 0.
|
538
|
563
|
|
539
|
564
|
A class' constructor that can be invoked without using an argument is the class' *default constructor*; that is, the constructor that is invoked when we create an object using an instruction like:
|
540
|
565
|
|
541
|
|
-`Bird pitirre;`
|
|
566
|
+```cpp
|
|
567
|
+Bird pitirre;
|
|
568
|
+```
|
542
|
569
|
|
543
|
570
|
You can see the implementations of the class `Bird` in the file `bird.cpp`. Note that the first constructor, `Bird (QWidget *parent=0)`, will assign random values to each of the object's attributes. Later on there is a brief explanation for the `randInt` function.
|
544
|
571
|
|
545
|
572
|
Have a look at the documentation for the second constructor, `Bird (int, EyeBrowType, QString, QString, QWidget *parent=0)`. This function requires four arguments and has a fifth argument that is optional since it has a default value. One way to use this constructor is creating an object like this:
|
546
|
573
|
|
547
|
|
-`Bird guaraguao(200, Bird::UPSET, "blue", "red");`
|
548
|
|
-
|
|
574
|
+```cpp
|
|
575
|
+Bird guaraguao(200, Bird::UPSET, "blue", "red");
|
|
576
|
+```
|
549
|
577
|
|
550
|
578
|
####Setters (mutators)
|
551
|
579
|
|
|
@@ -559,7 +587,7 @@ Classes provide methods to modify the values of the attributes of an objected th
|
559
|
587
|
|
560
|
588
|
You can see the method's declarations in Figure 1 and in the `Bird` class declaration in `bird.h`, and the implementation of the some of the methods in `bird.cpp`. The code in the following example creates the object `bobo` of the `Bird` class and then changes its size to 333.
|
561
|
589
|
|
562
|
|
-```
|
|
590
|
+```cpp
|
563
|
591
|
Bird bobo;
|
564
|
592
|
bobo.setSize(333);
|
565
|
593
|
```
|
|
@@ -575,7 +603,7 @@ Classes also provide methods to access (get) the value of the attribute of an ob
|
575
|
603
|
|
576
|
604
|
You can see the declarations of the methods in Figure 1 and in the `Bird` class declaration in `bird.h`, and the implementations of some of the methods in `bird.cpp`. The code in the following example creates the object `piolin` of the `Bird` class and prints its size:
|
577
|
605
|
|
578
|
|
-```
|
|
606
|
+```cpp
|
579
|
607
|
Bird piolin;
|
580
|
608
|
cout << piolin.getSize();
|
581
|
609
|
```
|
|
@@ -584,13 +612,17 @@ cout << piolin.getSize();
|
584
|
612
|
|
585
|
613
|
**MainWindow:** The file `mainwindow.h` contains the declaration of a class called `MainWindow`. The objects that are instances of this class will be able to use the overloaded methods
|
586
|
614
|
|
587
|
|
-`void MainWindow::addBird(int x, int y, Bird &b)`
|
|
615
|
+```cpp
|
|
616
|
+void MainWindow::addBird(int x, int y, Bird &b)
|
|
617
|
+```
|
588
|
618
|
|
589
|
|
-`void MainWindow::addBird(Bird &b)`
|
|
619
|
+```cpp
|
|
620
|
+void MainWindow::addBird(Bird &b)
|
|
621
|
+```
|
590
|
622
|
|
591
|
623
|
that will add to the screen a drawing of an object of the `Bird` class that is received as an argument. The code in the following example creates an object `w` of the `MainWindow` class, creates an object `zumbador` of the `Bird` class and adds it in the position (200,200) on the screen `w` using the first method.
|
592
|
624
|
|
593
|
|
-```
|
|
625
|
+```cpp
|
594
|
626
|
MainWindow w;
|
595
|
627
|
Bird zumbador;
|
596
|
628
|
w.addBird(200,200,zumbador);
|
|
@@ -612,11 +644,25 @@ w.addBird(200,200,zumbador);
|
612
|
644
|
|
613
|
645
|
**randInt:** The `Bird` class includes the method
|
614
|
646
|
|
615
|
|
-`int Bird::randInt(int min, int max)`
|
|
647
|
+```cpp
|
|
648
|
+int Bird::randInt(int min, int max)
|
|
649
|
+```
|
|
650
|
+
|
616
|
651
|
|
617
|
652
|
to generate random numbers in the range [min, max]. The method `randInt` depends on another function to generate random numbers that require a first element or *seed* to be evaluated. In this project, that first element is generated with the function call `srand(time(NULL)) ;`.
|
618
|
653
|
|
619
|
654
|
|
|
655
|
+
|
|
656
|
+!INCLUDE "../../eip-diagnostic/birds-objects/en/diag-birds-objects-01.html"
|
|
657
|
+
|
|
658
|
+!INCLUDE "../../eip-diagnostic/birds-objects/en/diag-birds-objects-02.html"
|
|
659
|
+
|
|
660
|
+!INCLUDE "../../eip-diagnostic/birds-objects/en/diag-birds-objects-03.html"
|
|
661
|
+
|
|
662
|
+!INCLUDE "../../eip-diagnostic/birds-objects/en/diag-birds-objects-04.html"
|
|
663
|
+
|
|
664
|
+!INCLUDE "../../eip-diagnostic/birds-objects/en/diag-birds-objects-05.html"
|
|
665
|
+
|
620
|
666
|
---
|
621
|
667
|
|
622
|
668
|
---
|
|
@@ -637,15 +683,15 @@ In this exercise you will familiarize yourself with the `Bird` class and with so
|
637
|
683
|
|
638
|
684
|
3. In the `main.cpp` file (in Sources) the `main` function does the following:
|
639
|
685
|
|
640
|
|
- a. Creates a Qt object application, called `a`. The only thing you need to know is that thanks to this object we can create a graphical application in Qt and interact with it.
|
|
686
|
+ a. Creates a Qt object application, called `a`. The only thing you need to know is that thanks to this object we can create a graphical application in Qt and interact with it.
|
641
|
687
|
|
642
|
|
- b. Creates an object of the MainWindow class called `w`. This object corresponds to the window that you will see when you run the application.
|
|
688
|
+ b. Creates an object of the MainWindow class called `w`. This object corresponds to the window that you will see when you run the application.
|
643
|
689
|
|
644
|
|
- c. Initializes the seed of Qt's random number generator. As a result of this, the new birds will have random sizes, colors and eyebrows (unless we force them to have specific values).
|
|
690
|
+ c. Initializes the seed of Qt's random number generator. As a result of this, the new birds will have random sizes, colors and eyebrows (unless we force them to have specific values).
|
645
|
691
|
|
646
|
|
- d. Invokes the method `show()` on the object `w`. This shows the window where the results will be displayed.
|
|
692
|
+ d. Invokes the method `show()` on the object `w`. This shows the window where the results will be displayed.
|
647
|
693
|
|
648
|
|
- e. In programs that don't have a graphical interface, the `main()` function usually ends with the instruction `return 0;`. In this project, the `return a.exec();` instruction is used so that the object `a` takes charge of the application from that moment on.
|
|
694
|
+ e. In programs that don't have a graphical interface, the `main()` function usually ends with the instruction `return 0;`. In this project, the `return a.exec();` instruction is used so that the object `a` takes charge of the application from that moment on.
|
649
|
695
|
|
650
|
696
|
4. Execute the program by clicking on the green arrow in the left menu on the Qt Creator window. The program should display a blank window.
|
651
|
697
|
|
|
@@ -661,33 +707,33 @@ In this exercise you will create an object of type `Bird` using the default cons
|
661
|
707
|
|
662
|
708
|
3. Use the setters `setSize(int size)`, `setFaceColor(Qstring color)`, `setEyeColor(Qstring color)`, and `setEyebrow(EyeBrowType)` so that `abelardo` looks as in Figure 2 (its size is 200).
|
663
|
709
|
|
664
|
|
- ---
|
|
710
|
+ ---
|
665
|
711
|
|
666
|
|
- ![figure2.png](images/figure2.png)
|
|
712
|
+ ![figure2.png](images/figure2.png)
|
667
|
713
|
|
668
|
|
- **Figure 2.** Abelardo.
|
|
714
|
+ **Figure 2.** Abelardo.
|
669
|
715
|
|
670
|
|
- ---
|
|
716
|
+ ---
|
671
|
717
|
|
672
|
718
|
4. Create another object of class Bird called `piolin` that has a blue face, green eyes and UNI eyebrows invoking the constructor `Bird(int size, EyeBrowType brow, QString faceColor, QString eyeColor, QWidget *parent = 0)`. Its size should be half of `abelardo`'s. Add it to the same window where `abelardo` is being displayed by using `w.addBird(300, 100, piolin)`, to obtain an image like the one in Figure 3
|
673
|
719
|
|
674
|
|
- ---
|
|
720
|
+ ---
|
675
|
721
|
|
676
|
|
- ![figure3.png](images/figure3.png)
|
|
722
|
+ ![figure3.png](images/figure3.png)
|
677
|
723
|
|
678
|
|
- **Figure 3.** Abelardo and Piolin.
|
|
724
|
+ **Figure 3.** Abelardo and Piolin.
|
679
|
725
|
|
680
|
|
- ---
|
|
726
|
+ ---
|
681
|
727
|
|
682
|
728
|
5. Create two other objects called `juana` and `alondra` that will appear drawn in the coordinates (100, 300) and (300,300) respectively. Create `juana` using the default constructor so that its properties are assigned randomly. Create `alondra` using the other constructor so that you may specify its properties during its creation. `alondra` should have the same size as `juana`, have the same type of eyebrows, and the same eye color. Its face should be white. Add `alondra` and `juana` to the window where `abelardo` and `piolin` are. The window should look similar to the one in Figure 4.
|
683
|
729
|
|
684
|
|
- ---
|
|
730
|
+ ---
|
685
|
731
|
|
686
|
|
- ![figure4.png](images/figure4.png)
|
|
732
|
+ ![figure4.png](images/figure4.png)
|
687
|
733
|
|
688
|
|
- **Figure 4.** Abelardo, Piolin, Juana and Alondra.
|
|
734
|
+ **Figure 4.** Abelardo, Piolin, Juana and Alondra.
|
689
|
735
|
|
690
|
|
- ---
|
|
736
|
+ ---
|
691
|
737
|
|
692
|
738
|
6. Run the program several times making sure that `alondra` and `juana` have the same size, eyebrows and eyes.
|
693
|
739
|
|