Está en la página 1de 16

UNIVERSIDAD POLITÉCNICA SALESIANA

CARRERA DE COMPUTACIÓN
PROGRAMACIÓN ORIENTADA A OBJETOS
PRACTICA 09: INTERFAZ GRAFICA DE USUARIO II

Nombre: Pedro Vinicio Alajo Huilcamaigua


Fecha: 25/06/22

Introducción
Damos básicamente por entendido que Qt es un marco tradicional que se ha adaptado
constantemente a las necesidades de las interfaces gráficas de usuario actuales. No es
sorprendente que este conjunto de herramientas escritas en C haya sido una de las
soluciones más aclamadas para el desarrollo de GUI independiente desde que se lanzó
por primera vez hace más de 20 años. El responsable de esta mala reputación está en todas
las herramientas como Qt Creator o QML, que se dominan en las últimas versiones, que no
solo mejoran el flujo de trabajo general, sino que también crean condiciones para la
colaboración entre diseñadores y programadores.

OBJETIVO:
• Crear una interfaz intuitiva y almacenar datos en un archivo de texto
PRE-REQUISITOS:
a) Computador personal con Microsoft Windows o GNU/Linux
b) Framework Qt
c) IDE Qt Creator
INSTRUCCIONES: 1. Lea detenidamente cada uno de los enunciados propuestos

2. Plantee una solución a cada uno de los ejercicios planteados


3. Programe una solución utilizando el framework Qt
4. Elabore un informe con la solución de los ejercicios
Definición del problema

Los obreros de una fábrica de siderúrgica pueden laborar en tres turnos: matutino, vespertino
y nocturno. Por cada hora que exceda las 40 horas semanales de trabajo, son consideradas
horas extra. Cada uno de los turnos tiene un pago por hora diferenciado, tal y como se
muestra en la siguiente tabla:

Turno Pago por hora


Matutino $ 5,15
Vespertino $ 8,50
Nocturno $ 12,65
Extra (cualquier turno) $ 20,10

Se realiza un descuento correspondiente al 9.5% por concepto de Seguro Social (IESS).


Escribir un programa que permita ingresar el nombre de un obrero, el turno, el número de
horas trabajadas y calcule su salario semanal. He de considerar que el número máximo de
horas extra a la semana no puede exceder de 10.

Ejemplo 1 Ejemplo 2 Ejemplo 3


Nombre: Juan Nombre: Andrea Nombre: Roberto
Turno: Vespertino Turno: Matutino Turno: Nocturno
Horas: 47 Horas: 30 Horas: 40
Obrero: Juan Obrero: Andrea Obrero: Roberto
Salario: $480.7 Salario: $154.5 Salario: $506
Descuento (9.5%): $45.6665 Descuento (9.5%): $14.6775 Descuento (9.5%): $48.07
Salario neto: $435.034 Salario neto: $139.822 Salario neto: $457.93

ACTIVIDADES PARA DESARROLLAR:

1. Abrir archivo. - Permite seleccionar un archivo txt y lo muestra


en el campo de Resultados. Para esto, considerar lo siguiente:
a) Si la información que se está mostrando, no ha
sido guardada, mostrar cuadro de diálogo
informando al usuario sobre el problema y brindar
las siguientes opciones: Guardar o Cancelar.
Con Guardar: Ejecuta la subrutina de Guardar y Abre archivo.
Con Cancelar: Regresa a la ventana y no ejecuta ninguna acción
b) Si no hay información que se pueda perder, Abre
archivo (Cuadro de diálogo)

2. Salir. - Verifica que la información no se pueda perder

3. Agregar íconos a la aplicación:


a) a la ventana principal
b) a la ventana de "Acerca de"
c) A los botones y menús
d) Colores

4. Subir a GitHub todo


1. Abrir archivo:
Para poder ejecutar de manera correcta el archivo se utilizó la clase QFile y la clase
QstreamText. Lo primero fue abrir un cuadro de diálogo para ubicar el archivo y luego
leer su contenido. Con los datos leídos, se cargó en el widget QtextPlain. Todo el
procedimiento se lo programo en un método el cual nos permitió poder ejecutar de
manera eficaz y correcta el código.
void Salarios::on_actionAcerca_de_Salarios_triggered()
{
//Crear un objeto del cuadro de dialogo
Acerca *dialog = new Acerca(this);
// Enviar datos a la otra ventana (Establecer version)
dialog->setVersion(VERSION);
//Mostrar la ventana en modo Modal(que se ejecute delante)
dialog->exec();
// Luego de cerrar la ventana

2 (salarios.cpp)

Podemos visualizar que el código más importante que se puede visualizar es


salarios.cpp aquí puedo encontrar la mayor parte del código donde puedes
ver los métodos
Para calcular, guardar y abrir desde un cuadro de texto y varias funciones a una función

Podemos ver aquí algunas clases para mostrar como QFileDialog donde se llama get.


Con el nombre "Guardar cuenta de salario" después de QText, la línea se anotará
cuando
En el momento de la salida, aparecerá un mensaje donde se puede ver dónde quiere
guardar el usuario

Texto, al seleccionarlo puede cerrar la aplicación y los datos creados en la aplicación


Se puede ver en el texto guardado donde el usuario lo colocó.

#include "salarios.h"
#include "ui_salarios.h"

Salarios::Salarios(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::Salarios)
{
ui->setupUi(this);
m_controlador = new Controlador;
}

Salarios::~Salarios()
{
delete ui;
}

void Salarios::on_btnCalcular_clicked()
{
calculos();
}

void Salarios::on_actionNuevo_triggered()
{
// Limpiar widgets
clean();
// Lipmiar el texto de los calculos
ui->outCAlculos->clear();
// Mostrar mensaje en la barra de estado
ui->statusbar->showMessage("Nuevos calculos de salario", 3000);

void Salarios::clean()
{
ui->inNombre->setText("");
ui->inHoras->setValue(0);
ui->inMatutina->setChecked(true); // Para que se devuelva ha el
horario "matutino"
ui->inNombre->setFocus(); // Para volver el cursor al nombre

void Salarios::calculos()
{
/*
//Obrero modelo("Juan",25,TipoJornada::Matutina);

//qDebug() << modelo.toString();


Controlador control;
//control.setDatos("Juan",46,TipoJornada::Matutina);
control.calcular();
if (control.calcular()){
qDebug() << control.getDAtos();
} else{
qDebug() << "No se pudo calcular datos";
}
*/
QString nombre = ui->inNombre->text();
int horas = ui->inHoras->value();
TipoJornada jornada;
if(ui->inMatutina->isChecked()){
jornada = TipoJornada::Matutina;
} else if(ui->inVespertina->isChecked()){
jornada = TipoJornada::Vespertina;
} else{
jornada = TipoJornada::Nocturna;
}
// Validacion de datos
if(nombre == "" || horas == 0){
QMessageBox::warning(this,
"Advertencia",
"El nombre y/o el numero de horas es
incorrecto");
return;
}

// Establecer datos al controlador


m_controlador->setDatos(nombre, horas, jornada);
// Calcular salarios
if (m_controlador->calcular()){
//Muestra los resultados

ui->outCAlculos->appendPlainText(m_controlador->getDAtos());
//qDebug() << m_controlador->getDAtos();
} else{
QMessageBox::critical(
this,
"ERROR",
"Ingrese bien los datos no podemos calcular el
salario");
}

// Limpiar widgets
clean();
// Mostrar mensaje en la barra de estado
ui->statusbar->showMessage("Salario de" + nombre + "
calculado.", 5000);

void Salarios::save()
{

// Abrir un cuadro de dialogo para seleccionar el path y archivo


a guardar
QString nombreArchivo = QFileDialog::getSaveFileName(this,
"Guardar
calculos de salarios",

QDir::home().absolutePath() +

"/salarios.txt",
"Archivo de
texto (*.txt)");

// Crear un archivo File


QFile archivo(nombreArchivo);
// Tratar arch. para escritura
if(archivo.open(QFile::WriteOnly | QFile::Truncate)){
// Crear un objeto 'stream' de texto
QTextStream salida(&archivo);
//Enviar los datos del resultado a la salida
salida << ui->outCAlculos->toPlainText();
//Mostrar mensaje en la barra de estados
ui->statusbar->showMessage("Archivo guardado en:" +
nombreArchivo,
4000);
// Cerrar archivo
archivo.close();

}else {
// Mensaje de error
QMessageBox::warning(this,
"Guardar archivo",
"Verifique informacion, no se puede
acceder al archivo para guardar los datos");
}
}

void Salarios::save_as()
{
///QString nombre = ui->inNombre->text();
///int horas = ui->inHoras->value();
QString lala = ui->outCAlculos->toPlainText();
if(lala == ""){
this->close();
}else {
QMessageBox::StandardButton reply = QMessageBox::question(
this,
"Salir","Desea guardar el archivo",
QMessageBox::Save | QMessageBox::Close |
QMessageBox::Cancel);
/*
"Guardar" ,
"No guardar",
"Cancelar");
*/
if(reply == QMessageBox::Save ) {
save();
} else if (reply == QMessageBox::Cancel){
return;
} else{
this->close();
}
/*
void MainWindow::on_pushButton_clicked()

QMessageBox::StandardButton reply = QMessageBox::question(this,


"My Title", "This is my custom
message",
QMessageBox::Yes | QMessageBox::No);
if(reply == QMessageBox::Yes) {
QApplication::quit();
} else {
qDebug() << "No is clicked";
}
}
*
* */

void Salarios::on_actionCalcular_triggered()
{
calculos();
}

void Salarios::on_action_Salir_triggered()
{
save_as();

void Salarios::on_actionGuardar_triggered()
{
save();
}

void Salarios::on_actionAcerca_de_Salarios_triggered()
{
//Crear un objeto del cuadro de dialogo
Acerca *dialog = new Acerca(this);
// Enviar datos a la otra ventana (Establecer version)
dialog->setVersion(VERSION);
//Mostrar la ventana en modo Modal(que se ejecute delante)
dialog->exec();
// Luego de cerrar la ventana

void Salarios::on_actionAbrir_triggered()
{
// Abrir un cuadro de dialogo para seleccionar el path y archivo
a abrir
QString nombreArchivo1 = QFileDialog::getOpenFileName(this,
"Abrir
archivo de calculo de salarios",

QDir::home().absolutePath(),
"Archivo
de texto (*.txt)");

QFile file(nombreArchivo1);

if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&file);
while (!in.atEnd()) {
QString linea = in.readLine();
ui->outCAlculos->appendPlainText(linea);
}
ui->statusbar->showMessage("Archivo:" + nombreArchivo1 +
"abierto", 4000);
file.close() ;

#include "salarios.h"
#include "ui_salarios.h"

Salarios::Salarios(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::Salarios)
{
ui->setupUi(this);
m_controlador = new Controlador;
}

Salarios::~Salarios()
{
delete ui;
}

void Salarios::on_btnCalcular_clicked()
{
calculos();
}

void Salarios::on_actionNuevo_triggered()
{
// Limpiar widgets
clean();
// Lipmiar el texto de los calculos
ui->outCAlculos->clear();
// Mostrar mensaje en la barra de estado
ui->statusbar->showMessage("Nuevos calculos de salario", 3000);

void Salarios::clean()
{
ui->inNombre->setText("");
ui->inHoras->setValue(0);
ui->inMatutina->setChecked(true); // Para que se devuelva ha el
horario "matutino"
ui->inNombre->setFocus(); // Para volver el cursor al nombre

}
void Salarios::calculos()
{
/*
//Obrero modelo("Juan",25,TipoJornada::Matutina);

//qDebug() << modelo.toString();


Controlador control;
//control.setDatos("Juan",46,TipoJornada::Matutina);
control.calcular();
if (control.calcular()){
qDebug() << control.getDAtos();
} else{
qDebug() << "No se pudo calcular datos";
}
*/
QString nombre = ui->inNombre->text();
int horas = ui->inHoras->value();
TipoJornada jornada;
if(ui->inMatutina->isChecked()){
jornada = TipoJornada::Matutina;
} else if(ui->inVespertina->isChecked()){
jornada = TipoJornada::Vespertina;
} else{
jornada = TipoJornada::Nocturna;
}
// Validacion de datos
if(nombre == "" || horas == 0){
QMessageBox::warning(this,
"Advertencia",
"El nombre y/o el numero de horas es
incorrecto");
return;
}

// Establecer datos al controlador


m_controlador->setDatos(nombre, horas, jornada);
// Calcular salarios
if (m_controlador->calcular()){
//Muestra los resultados

ui->outCAlculos->appendPlainText(m_controlador->getDAtos());
//qDebug() << m_controlador->getDAtos();
} else{
QMessageBox::critical(
this,
"ERROR",
"Ingrese bien los datos no podemos calcular el
salario");
}

// Limpiar widgets
clean();
// Mostrar mensaje en la barra de estado
ui->statusbar->showMessage("Salario de" + nombre + "
calculado.", 5000);
}

void Salarios::save()
{

// Abrir un cuadro de dialogo para seleccionar el path y archivo


a guardar
QString nombreArchivo = QFileDialog::getSaveFileName(this,
"Guardar
calculos de salarios",

QDir::home().absolutePath() +

"/salarios.txt",
"Archivo de
texto (*.txt)");

// Crear un archivo File


QFile archivo(nombreArchivo);
// Tratar arch. para escritura
if(archivo.open(QFile::WriteOnly | QFile::Truncate)){
// Crear un objeto 'stream' de texto
QTextStream salida(&archivo);
//Enviar los datos del resultado a la salida
salida << ui->outCAlculos->toPlainText();
//Mostrar mensaje en la barra de estados
ui->statusbar->showMessage("Archivo guardado en:" +
nombreArchivo,
4000);
// Cerrar archivo
archivo.close();

}else {
// Mensaje de error
QMessageBox::warning(this,
"Guardar archivo",
"Verifique informacion, no se puede
acceder al archivo para guardar los datos");
}
}

void Salarios::save_as()
{
///QString nombre = ui->inNombre->text();
///int horas = ui->inHoras->value();
QString lala = ui->outCAlculos->toPlainText();
if(lala == ""){
this->close();
}else {
QMessageBox::StandardButton reply = QMessageBox::question(
this,
"Salir","Desea guardar el archivo",
QMessageBox::Save | QMessageBox::Close |
QMessageBox::Cancel);
/*
"Guardar" ,
"No guardar",
"Cancelar");
*/
if(reply == QMessageBox::Save ) {
save();
} else if (reply == QMessageBox::Cancel){
return;
} else{
this->close();
}
/*
void MainWindow::on_pushButton_clicked()

QMessageBox::StandardButton reply = QMessageBox::question(this,


"My Title", "This is my custom
message",
QMessageBox::Yes | QMessageBox::No);
if(reply == QMessageBox::Yes) {
QApplication::quit();
} else {
qDebug() << "No is clicked";
}
}
*
* */

void Salarios::on_actionCalcular_triggered()
{
calculos();
}

void Salarios::on_action_Salir_triggered()
{
save_as();

void Salarios::on_actionGuardar_triggered()
{
save();
}

void Salarios::on_actionAcerca_de_Salarios_triggered()
{
//Crear un objeto del cuadro de dialogo
Acerca *dialog = new Acerca(this);
// Enviar datos a la otra ventana (Establecer version)
dialog->setVersion(VERSION);
//Mostrar la ventana en modo Modal(que se ejecute delante)
dialog->exec();
// Luego de cerrar la ventana
}

void Salarios::on_actionAbrir_triggered()
{
// Abrir un cuadro de dialogo para seleccionar el path y archivo
a abrir
QString nombreArchivo1 = QFileDialog::getOpenFileName(this,
"Abrir
archivo de calculo de salarios",

QDir::home().absolutePath(),
"Archivo
de texto (*.txt)");

QFile file(nombreArchivo1);

if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;

QTextStream in(&file);
while (!in.atEnd()) {
QString linea = in.readLine();
ui->outCAlculos->appendPlainText(linea);
}
ui->statusbar->showMessage("Archivo:" + nombreArchivo1 +
"abierto", 4000);
file.close() ;

Ejecución del programa (Se adjuntan capturas)


1(Ingreso de empleadores)
2
(Múltiples opciones, en esta vamos a ejecutar la opción guardad para comprobar que se
guardara como un archivo de txt. )

3(Como podemos visualizar el archivo se guardara como lo ha solicitado el ingeniero)_


4(Visualizamos el archivo donde lo deseamos guardar)

5
(Podemos visualizar que el archivo se abrirá en notas ya que es un archivo .txt)
6(Veremos como tienen similitud exacta con lo guardado)

7(Definición y quien creo el código y posteriormente la interfaz gráfica”


Repositorio Creado en GitHub:
https://github.com/rtufino/P59-Qt-Tiendahttps://github.com/PedroValve7/P60-POO-Salarios15-6-2022

Conclusión
Para dar por concluido yo pude entender que la interfaz gráfica implica una o varias
relaciones de generalización y enlazamiento dado por entendido esto podemos decir que
de igual manera si no utilizáramos los métodos y los pasos requeridos para crear la
interfaz grafica y de igual manera crear la interfaz en IU de igual manera aprendimos ha
poner los iconos necesarios, y de igual manera poder crear los diferentes widgets en este
programa de salarios.

Referencias y bibliografía

clic, P. (Jueves de Enero de 2018). Programador clic . Obtenido de Programador clic :


https://programmerclick.com/article/32352046127/

Tufiño, R. (16 de Junio de 2022). GitHub. Obtenido de GitHub:


https://github.com/rtufino/P60-Salarios

También podría gustarte