[Aporte] Deletreador C++

Iniciado por overxfl0w13, 14 Agosto 2012, 02:58 AM

0 Miembros y 1 Visitante están viendo este tema.

overxfl0w13

Buenas compañeros, vengo a dejar el code de un deletreador hecho en C++ con Gui en Qt, que aunque estoy de vacaciones, siempre sale tiempo para programar algo :).

La voz es mia (cutre) porque no he podido encontrar nada por google y actualmente solo tiene las letras en español con posible ampliación a letras en inglés (si encuentro alguna).

Screen:

Descarga Exe: http://www.mediafire.com/?u4oa2f857av35kl


Headers:

Deletreador.hpp:

Código (cpp) [Seleccionar]
#include <QtGui>

class deletreador
{
       public:
           deletreador(QString texto,QString idiomasel);

       private:
           QString textRead;
           QSound *letraRead;
};



Window.hpp:

Código (cpp) [Seleccionar]
#include <QObject>
#include <QtGui>
#include <QMessageBox>

class window : public QMainWindow
{
       Q_OBJECT

       public:

             window();
             void compruebaPalindromo();
             void primeLetra();
             void ultimLetra();
             void longiCadena();
             void funcionReves();

       private slots:

             void deletrear();

       public:

             QWidget *myWindow;
             QVBoxLayout *mainLayout,*izqLayout,*derLayout;
             QHBoxLayout *izqderLayout,*buttonLayout;
             QLineEdit *textIn;
             QPushButton *acceptButton;
             QLabel *ultimaLetra,*primeraLetra,*longitudCadena,*palindroma,*mainImage,*mainCongratulations,*mainSpace,*spaceTwo,*spaceThree,*textoReves,*selecIdioma,*labelTexto;
             QString textoDel,ulLetra,priLetra,textPalin,acumPalin,textoRev,idiomasel;
             QPixmap *image;
             QToolBar *languageToolbar;
             QMessageBox *mensaje;
             QComboBox *idiomas;
};



Sources:

Window.cpp:

Código (cpp) [Seleccionar]
#include "window.hpp"
#include "deletreador.hpp"

window::window()
{
   // Definicion

   myWindow = new QWidget;
   mainLayout = new QVBoxLayout;
   izqLayout = new QVBoxLayout;
   derLayout = new QVBoxLayout;
   izqderLayout = new QHBoxLayout;
   textIn = new QLineEdit;
   idiomas = new QComboBox;
   buttonLayout = new QHBoxLayout;
   labelTexto = new QLabel("Inserta el texto");
   labelTexto->setAlignment(Qt::AlignCenter);


   /***********************************/

   idiomas->addItem("Español");
   idiomas->addItem("Inglés");
   acceptButton = new QPushButton("Deletrear");
   mainImage = new QLabel;
   mensaje = new QMessageBox;
   mensaje->setText("Cadena Vacia");
   image = new QPixmap("Resources/Images/libro.png");
   mainImage->setPixmap(*image);
   mainImage->setAlignment(Qt::AlignCenter);
   ultimaLetra = new QLabel("La ultima letra es: ");
   textoReves = new QLabel("La cadena invertida es: ");
   selecIdioma = new QLabel("Idioma seleccionado: " + idiomas->currentText());
   mainSpace = new QLabel(" ");
   spaceTwo = new QLabel(" ");
   spaceThree = new QLabel(" ");
   primeraLetra = new QLabel("La primera letra es: ");
   longitudCadena = new QLabel("La longitud del texto es: ");
   palindroma = new QLabel("La palabra es palindroma: ");
   mainCongratulations = new QLabel("By Overxfl0w");
   mainCongratulations->setAlignment(Qt::AlignCenter);
   mainCongratulations->setText("<font size=3 color=#0000FF>By Overxfl0w to elhacker.net</font>");
   idiomas->setFixedSize(100,20);

   // Conexiones

   QObject::connect(acceptButton,SIGNAL(clicked()),this,SLOT(deletrear()));

   // Construccion

   myWindow->setMinimumSize(420,360);
   myWindow->setMaximumSize(420,360);
   buttonLayout->addWidget(idiomas);
   buttonLayout->addWidget(acceptButton);
   izqLayout->addWidget(primeraLetra);
   izqLayout->addWidget(ultimaLetra);
   izqLayout->addWidget(textoReves);
   derLayout->addWidget(selecIdioma);
   derLayout->addWidget(palindroma);
   derLayout->addWidget(longitudCadena);
   izqderLayout->addLayout(izqLayout);
   izqderLayout->addLayout(derLayout);
   mainLayout->addWidget(mainImage);
   mainLayout->addWidget(spaceThree);
   mainLayout->addWidget(labelTexto);
   mainLayout->addWidget(textIn);
   mainLayout->addLayout(buttonLayout);
   mainLayout->addWidget(mainSpace);
   mainLayout->addLayout(izqderLayout);
   mainLayout->addWidget(spaceTwo);
   mainLayout->addWidget(mainCongratulations);
   myWindow->setLayout(mainLayout);
   myWindow->setWindowTitle("Speller By Overxfl0w");
   myWindow->show();
}

void window::deletrear()
{
   if(textIn->text() != "")
   {
       primeLetra();
       ultimLetra();
       funcionReves();
       compruebaPalindromo();
       longiCadena();
       delete selecIdioma;
       idiomasel = idiomas->currentText();
       selecIdioma = new QLabel("Idioma seleccionado: " + idiomasel);
       derLayout->addWidget(selecIdioma);
       deletreador deletreador(textIn->text(),idiomasel);
   }
   else
   {
       mensaje->exec();
   }

}

void window::primeLetra()
{
   priLetra = textIn->text();
   delete primeraLetra;
   primeraLetra = new QLabel("La primera letra es: " + priLetra[0]);
   izqLayout->addWidget(primeraLetra);

}

void window::ultimLetra()
{
   int longitud = textIn->text().length();
   ulLetra = textIn->text();
   delete ultimaLetra;
   ultimaLetra = new QLabel("La ultima letra es: " +ulLetra[longitud-1]);
   izqLayout->addWidget(ultimaLetra);
}

void window::longiCadena()
{
   int longitud2 = textIn->text().length();
   delete longitudCadena;
   longitudCadena = new QLabel("La longitud del texto es: " + QString::number(longitud2));
   derLayout->addWidget(longitudCadena);
}

void window::compruebaPalindromo()
{
   textPalin = textIn->text();
   acumPalin = "";
   for(int x = textPalin.length()-1;x>=0;x--)
   {
       acumPalin = acumPalin + textPalin[x];
   }
   if(textPalin == acumPalin)
   {
       delete palindroma;
       palindroma = new QLabel("La palabra es palindroma: Si");
       derLayout->addWidget(palindroma);
       acumPalin = "";
   }
   else
   {
       delete palindroma;
       palindroma = new QLabel("La palabra es palindroma: No");
       derLayout->addWidget(palindroma);
       acumPalin = "";
   }

}

void window::funcionReves()
{
   textPalin = textIn->text();
   textoRev = "";
   for(int x = textPalin.length()-1;x>=0;x--)
   {
       textoRev = textoRev + textPalin[x];
   }
   delete textoReves;
   textoReves = new QLabel("La cadena invertida es: " + textoRev);
   izqLayout->addWidget(textoReves);
}


Deletreador.cpp:

Código (cpp) [Seleccionar]
#include "deletreador.hpp"
#include "window.hpp"
#include <windows.h>

deletreador::deletreador(QString texto,QString idiomasel)
{
   textRead = texto;
   if(idiomasel == "Español")
   {
   for(int x=0;x<textRead.length();x++)
   {
       if(textRead[x] != ' ')
       {
       letraRead = new QSound("Resources/Sounds/Spanish/"+textRead[x]+".wav");
       letraRead->play();
       Sleep(1100);
       }
   }
   }
   if(idiomasel == "Inglés")
   {
       for(int x=0;x<textRead.length();x++)
       {
           if(textRead[x] != ' ')
           {
           letraRead = new QSound("Resources/Sounds/English/"+textRead[x]+".wav");
           letraRead->play();
           Sleep(1100);
           }
       }
       }
   }


Main.cpp:

Código (cpp) [Seleccionar]
#include "window.hpp"

int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   window window;
   return app.exec();
}


PD: Usa windows.h para el Sleep si surge cualquier problema, incluir la libreria stdio.h con la función sleep pasándole un int como valor para los segundos.
Un saludo :)
[/url]

eleon

#1
:O Genial, gracias por el aporte.

EDITO:

Una pregunta, ¿qué tipo de funciones (parte gráfica o llamadas al sistema) no has encontrado en QT y has tenido que usar la API de Windows?.

No tengo mucha mano con QT y quisiera saber qué cosas se puede hacer con ella y qué cosas no se pueden hacer.

Gracias.

overxfl0w13

#2
Cita de: eleon en 14 Agosto 2012, 03:29 AM
:O Genial, gracias por el aporte.

EDITO:

Una pregunta, ¿qué tipo de funciones (parte gráfica o llamadas al sistema) no has encontrado en QT y has tenido que usar la API de Windows?.

No tengo mucha mano con QT y quisiera saber qué cosas se puede hacer con ella y qué cosas no se pueden hacer.

Gracias.

La API de Windows no la he usado nada para la parte gráfica, únicamente para hacer un sleep entre letra y letra y que así de tiempo a la reproducción de las mismas.

Con Qt puedes hacer  bastantes cosas desde frameworks hasta manejar diferentes tipos de servidores, sockets... Te dejo la documentación que va de lujo y no estaría de más que te mirases sus clases,métodos etc:

http://qt-project.org/doc/qt-4.8/

Un saludo :)
[/url]

avesudra

#3
¡Olé que arte! Ahora con sílabas, mm eso es más complicado , pues habría que hacer una función que separase cada palabra en sílabas que habrá reglas, no me acuerdo.De todas maneras por si te da por hacerlo aquí están todas las sílabas:
http://www.solosequenosenada.com/gramatica/spanish/listado_silabas.php
PD: Se te han olvidado los números.
Regístrate en

overxfl0w13

#4
Cita de: avesudra en 14 Agosto 2012, 14:38 PM
¡Olé que arte! Ahora con sílabas, mm eso es más complicado , pues habría que hacer una función que separase cada palabra en sílabas que habrá reglas, no me acuerdo.De todas maneras por si te da por hacerlo aquí están todas las sílabas:
http://www.solosequenosenada.com/gramatica/spanish/listado_silabas.php
PD: Se te han olvidado los números.

En un principio el proyecto era para leer frases completas, pero surgieron problemas precisamente con las sílabas. Tenía pensado grabar todas las combinaciones de 2 silabas y hacerlo más limitado, pero al final preferí dejarlo así :).

Lo de los números no se me había olvidado. simplemente que es muy pesado ir grabando letra a letra y número a número, no había ganas xD

Un saludo :)
[/url]

avesudra

Es que son demasiadas silabas comprendo que sea un coñazo.
Regístrate en

Kasswed

Muy útil, gracias por el aporte.

Ahora el mundo irá a mejor.
"He who allows himself to be insulted, deserves to be."

Repórtame cualquier falta a las normas del foro por mensaje privado.