Normas del foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - Noviembre 23, 2008, 09:23:09
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: Problema simple con variables en c++ y qt 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Problema simple con variables en c++ y qt  (Leído 327 veces)
ayahora
Recien Llegado
*
Desconectado Desconectado

Mensajes: 5


Ver Perfil
« en: Diciembre 23, 2007, 05:19:33 »

Hola,
He empezado a hacer algunas pruebas con C++ y Qt con unos manuales que me he bajado. El caso es que estoy intentando hacer una aplicación simple para probar.
El formulario consta de un label (llamado pantalla) y un botón que está enlazado a una función.

El código que tengo puesto en el widget es el siguiente:

Código: (cpp)
#include <qlabel.h>

#include "paraprobarwidget.h"

paraprobarWidget::paraprobarWidget(QWidget* parent, const char* name, WFlags fl)
        : paraprobarWidgetBase(parent,name,fl)
{}

paraprobarWidget::~paraprobarWidget()
{}

/*$SPECIALIZATION$*/
void paraprobarWidget::button_clicked()
{
   
char palabra[4];
palabra="hola";
pantalla->setText[b]("%c",palabra)[/b];
}


El caso es que si donde pone ""%c",palabra" lo susituyo por una palabra cualquiera todo va bien, pero así me da varios errores. ¿Por qué? No se pueden poner variables en labels?

Salu2  Wink
En línea
Ni0
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1362


Ni0-inside the source code

Ni0@el-hacker.org
Ver Perfil WWW Email
« Respuesta #1 en: Diciembre 23, 2007, 02:01:58 »

es porque palabra es un array, una cadena, un vector o como quieras llamarlo, y no un caracter, para mostrar una cadena se usa "%s"
por lo que quedaria:
""%s", palabra"
con %c estas mostrando un caracter, y como dije, palabra no es un caracter, nisiquiera te mostraria el primero, cuando leas sobre arrays o vectores te vas a dar cuenta porque.

salu2!
En línea

Inside The Source Code




Necesitas ser usuario para ver los enlaces Crear Usuario  Hacer Sesion
Linux Registred User #460377
ayahora
Recien Llegado
*
Desconectado Desconectado

Mensajes: 5


Ver Perfil
« Respuesta #2 en: Diciembre 24, 2007, 07:40:20 »

Gracias por tu ayuda. Ya cambié "%c" por "%s"  pero sigue dando error al compilar. Concretamente:

Código:
compilando paraprobarwidget.cpp (g++)
/home/miguel/PROYECTOS/paraprobar/src/paraprobarwidget.cpp: In member function ‘virtual void paraprobarWidget::button_clicked()’:
/home/miguel/PROYECTOS/paraprobar/src/paraprobarwidget.cpp:38: error: incompatible types in assignment of ‘const char [5]’ to ‘char [4]’
/home/miguel/PROYECTOS/paraprobar/src/paraprobarwidget.cpp:39: error: no matching function for call to ‘QLabel::setText(const char [3], char [4])’
/usr/share/qt3/include/qlabel.h:103: note: candidates are: virtual void QLabel::setText(const QString&)
make: *** [paraprobarwidget.o] Error 1
make: Debido a los errores, el objetivo `paraprobar' no se reconstruyó.
***Terminado con estado 2***

salu2  Wink
En línea
dreams_eater
Habitual
*****
Desconectado Desconectado

Mensajes: 184



Ver Perfil
« Respuesta #3 en: Diciembre 24, 2007, 09:45:18 »

No programo en QT
me gustaria ver el codigo completo
eso no es el codigo completo

porque creas las funciones en el cpp, deverian estar en el .h?

Estudia las clases primero antes de dedicarte al QT, me huele a que no usas bien los operandos "::"
En línea



"La juventud envejece, la inmadurez se supera, la ignorancia puede educarse, y la borrachera desperjarse, pero la estupidez dura para siempre" - Aristófanes
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 190



Ver Perfil
« Respuesta #4 en: Diciembre 24, 2007, 10:00:36 »

Buenas
porque creas las funciones en el cpp, deverian estar en el .h?
En un .h van las declaraciones de las funciones y las estructuras que usas. Las implementaciones van en un .c o .cpp

Fijense en esto
char palabra[4];
palabra="hola";

Un poco de background: como saben un vector es un puntero constante a la primera posicion. Es parecido a hacer const char palabra (como dice el compilador)

1) Al hacer la asignacion palabra = "hola" , ayahora esta tratando de cambiar esa posicion de memoria. Por eso salta el error. Lo que tiene que utilizar es strcpy || strncpy || memcpy
2) palabra posee 4 posiciones y las cadenas como "hola" son terminadas en '\0', por lo que hola necesita 5 posiciones, no 4

Salu2, FreakMind
« Última modificación: Diciembre 24, 2007, 10:05:23 por ҒrεακΜιи∂ » En línea

Connoisseurs of C semantics find C++ inferior to ++C

dreams_eater
Habitual
*****
Desconectado Desconectado

Mensajes: 184



Ver Perfil
« Respuesta #5 en: Diciembre 24, 2007, 10:45:01 »

eso me pasa por no mirarlo todo, esa horrible parte no la lei, jajaja
Lei que QT acepta html, esto ce refiere a los const char* que recibe como parametros. Estas programando en C++, no otro lenguaje.
Lo que ҒrεακΜιи∂ dice en otras palabras es que :

el nombre de un arreglo es equibalente a la dirección del primer elemento.
por lo tanto en strcpy sería algo así:
strcpy(palabra,"hola");
te dice que son cinco porque todo string tenmina con un caracter nulo (que es un cero).
hola= 'h' 'o' 'l' 'a' '\0'
En línea



"La juventud envejece, la inmadurez se supera, la ignorancia puede educarse, y la borrachera desperjarse, pero la estupidez dura para siempre" - Aristófanes
Ni0
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1362


Ni0-inside the source code

Ni0@el-hacker.org
Ver Perfil WWW Email
« Respuesta #6 en: Diciembre 24, 2007, 02:07:29 »

bueh, aparte de todo eso, cuando uses strcpy u otra (que esta en strings.h) tambien tenes que usar %s no?

salu2!
En línea

Inside The Source Code




Necesitas ser usuario para ver los enlaces Crear Usuario  Hacer Sesion
Linux Registred User #460377
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 190



Ver Perfil
« Respuesta #7 en: Diciembre 24, 2007, 03:36:01 »

bueh, aparte de todo eso, cuando uses strcpy u otra (que esta en strings.h) tambien tenes que usar %s no?

salu2!
A que te referis?
En línea

Connoisseurs of C semantics find C++ inferior to ++C

Ni0
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1362


Ni0-inside the source code

Ni0@el-hacker.org
Ver Perfil WWW Email
« Respuesta #8 en: Diciembre 24, 2007, 04:22:39 »

ayahora dice en el primer post:
Citar
El caso es que si donde pone ""%c",palabra" lo susituyo por una palabra cualquiera todo va bien, pero así me da varios errores. ¿Por qué? No se pueden poner variables en labels?
y como palabra es una cadena, no deberia poner %s en vez de %c???

salu2!
En línea

Inside The Source Code




Necesitas ser usuario para ver los enlaces Crear Usuario  Hacer Sesion
Linux Registred User #460377
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 190



Ver Perfil
« Respuesta #9 en: Diciembre 24, 2007, 05:10:18 »

ayahora dice en el primer post:
Citar
El caso es que si donde pone ""%c",palabra" lo susituyo por una palabra cualquiera todo va bien, pero así me da varios errores. ¿Por qué? No se pueden poner variables en labels?
y como palabra es una cadena, no deberia poner %s en vez de %c???

salu2!
Asi es... Pero antes de usar el %s tiene que tener el '\0' sino tirara errores tambien.
Lo que le dice el %s a printf es que imprima todos los caracteres hasta encontrar un '\0'. Imaginate que si no lo encuentra va a seguir imprimiendo hasta que por casualidad encuentre uno en toda la memoria (eso si primero no explota)

Salu2, FreakMind
En línea

Connoisseurs of C semantics find C++ inferior to ++C

ayahora
Recien Llegado
*
Desconectado Desconectado

Mensajes: 5


Ver Perfil
« Respuesta #10 en: Diciembre 25, 2007, 10:20:47 »

Al final lo dejé así, tal y como he entendido más o menos con vuestros posts:

Código:
void paraprobarWidget::button_clicked()
{
   
char palabra[5];
strcpy(palabra,"hola");
pantalla->setText("%s",palabra);
}

Pero sigue dando errores..... ¿Por qué?

Código:
/home/miguel/PROYECTOS/paraprobar/src/paraprobarwidget.cpp:40: error: no matching function for call to ‘QLabel::setText(const char [3], char [5])’
/usr/share/qt3/include/qlabel.h:103: note: candidates are: virtual void QLabel::setText(const QString&)

Gracias por su ayuda.

salu2  Wink
En línea
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 190



Ver Perfil
« Respuesta #11 en: Diciembre 25, 2007, 03:23:38 »

for call to ‘QLabel::setText(const char [3], char [5])’
/usr/share/qt3/include/qlabel.h:103: note: candidates are: virtual void QLabel::setText(const QString&)

Realmente nunca use qt. Pero por el error del compilador pareceria como que estas usando mal el metodo setText.
Vos lo usas con el siguiente prototipo setText(const char [3], char [5]) y en realidad tendrias que usarlo con este setText(const QString&)

Salu2, FreakMind
En línea

Connoisseurs of C semantics find C++ inferior to ++C

dreams_eater
Habitual
*****
Desconectado Desconectado

Mensajes: 184



Ver Perfil
« Respuesta #12 en: Diciembre 25, 2007, 04:39:47 »

setText(const QString&) ? mira que & es un operador he. que diablos hace alli atras?

En línea



"La juventud envejece, la inmadurez se supera, la ignorancia puede educarse, y la borrachera desperjarse, pero la estupidez dura para siempre" - Aristófanes
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 190



Ver Perfil
« Respuesta #13 en: Diciembre 25, 2007, 05:52:31 »

setText(const QString&) ? mira que & es un operador he. que diablos hace alli atras?
En C++, cuando haces esto Clase&    var, siginifca que var referencia a la clase. Es parecido a un puntero, solamente que no necesitas desreferenciarlo para obtener el contenido.
En línea

Connoisseurs of C semantics find C++ inferior to ++C

dreams_eater
Habitual
*****
Desconectado Desconectado

Mensajes: 184



Ver Perfil
« Respuesta #14 en: Diciembre 25, 2007, 06:56:00 »

mmm...me dare unos dias.
no se sorprendan si no posteo.
En línea



"La juventud envejece, la inmadurez se supera, la ignorancia puede educarse, y la borrachera desperjarse, pero la estupidez dura para siempre" - Aristófanes
ayahora
Recien Llegado
*
Desconectado Desconectado

Mensajes: 5


Ver Perfil
« Respuesta #15 en: Enero 05, 2008, 06:35:34 »

El error era que lo declaraba como una string en vez de como una Qstring que es lo que acepta un Qlabel.
Total, que quedaría asi:

Código:
void paraprobarWidget::button_clicked()
{
    QString palabra = "Hola";
    pantalla->setText(palabra);
}

Salu2  Wink
En línea
Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: Problema simple con variables en c++ y qt « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.7 | SMF © 2006-2007, Simple Machines LLC