Vous êtes sur la page 1sur 10

22/3/2019 Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre

Imaginemos un mundo libre

La paz interior comienza en el momento en el que decides no permitir, que ninguna persona o
evento, tome el control de tus emociones.

Manejo de Strings con Qt – QString ,


QChar, QStringList

Trabajar con cadenas de caracteres (Strings), es algo que se realiza a menudo en la programación
informática.

Qt nos proporciona la clase QString (h p://qt.nokia.com/doc/4.6/qstring.html) que nos va a


permitir crear cadenas de tipo Unicode.

Unicode es un estándar internacional que actualmente usan la mayoría de sistemas de escritura y


funciona básicamente asignando un código binario a cada caracter.

Lo que permite Unicode es que los usuarios puedan visualizar la información de los programas sin
ningún problema, independientemente del idioma y de la plataforma sobre la cual está construido
el software.

La clase QString permite manipular la información de estas cadenas tipo Unicode y además
convertirlas a otros tipos de datos.

Cuando se crea una cadena en realidad lo que está pasando es que Qt almacena una cadena
compuesta por un conjunto de QChars (caracteres) de 16 bits. Veremos la clase QChar más
adelante.

Vamos a revisar paso a paso los métodos más importantes de QString.

Debemos incluir la clase por supuesto:

1 #include <QString>

¿Cómo definimos una cadena?


QString str(“Mi cadena”);

Si queremos añadir caracteres al inicio de una cadena:


str.prepend(“Texto al inicio “);

Añadir caracteres al final de una cadena:


str.append(” Texto al final”);

Para reemplazar una cadena por otra:


str.replace(10,4,”Nuevo texto”); // A partir del caracter 10, remover 4 caracteres y reemplazar por
Nuevo Texto.

Para eliminar caracteres de una cadena:


str.remove(5,5) ; // A partir del caracter 5, remover 5 caracteres.

file:///C:/Users/Manuel/Desktop/Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre.html 1/10
22/3/2019 Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre

Para definir el tamaño exacto de una cadena:


str.resize(10); // Puede contener solo 10 caracteres.

Para retornar el tamaño de una cadena.


str.size();

Para retornar el número de caracteres de una cadena. (Similar a size)


str.length();

Para eliminar espacios en blanco al inicio y final de una cadena:


str.trimmed();

Para eliminar espacios en blanco del principio y del final y reemplazar un caracter considerado
como espacio por un espacio en blanco.
str.simplified();

Para comprobar si una cadena es vacía:


str.isEmpty();

Para buscar un caracter en una posición determinada de una cadena:


str.indexOf(“caracter”,posicion);

Para retornar la posición de la última ocurrencia encontrada en una cadena:


str.lastIndexOf(“caracter”);

Para comprobar si existe una ocurrencia dentro de una cadena:


str.contains(“cadena”, Qt::CaseInsensitive); // Retorna True o False

// Qt::CaseInsensitive no diferencia mayúsculas de minúsculas y también existe Qt::CaseSensitive


que produce el efecto contrario.

Para determinar si una cadena empieza con determinados caracteres:


str.startsWith(“car”); // Retorna True o False

Para determinar si una cadena finaliza con determinados caracteres:


str.endsWith(“car”); // Retorna True o False

Para limpiar el contenido de una cadena:


str.clear();

También podemos crear la cadena inicialmente vacía y después agregarle los caracteres con:
QString str;
str.setNum(15);

Para convertir una cadena a flotante:


int num = str.toDouble();

Para convertir una cadena a entero:


int num = str.toInt();

Si la cadena está formada por caracteres entonces, puedes transformar esa cadena a entero usando
una base que puede estar entre 2 y 36. Por defecto es 10.

Por ejemplo si quiero transformar la cadena “FFF” del sistema hexadecimal a un entero uso la base
16, base usada por el sistema hexadecimal.

file:///C:/Users/Manuel/Desktop/Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre.html 2/10
22/3/2019 Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre

En este caso la función toInt() recibe 2 parámetros uno de tipo booleano que por defecto es True y
la base a la que sea desea convertir.

QString str = “FFF”;


bool ok;
int num = str.toInt(&ok, 16); // 4095 sería el valor de num

Si existe un error en la conversión, por ejemplo queremos convertir “loquesea” a entero, entonces
ok devuelve False y el entero tendrá como valor 0.

Si la cadena empieza con “0x” se usa la base 16, si empieza con “0” se usa la base 8, de lo contrario
se usa la base 10.

Para convertir un número a una cadena:


QString str = QString::number(9.0); // str sería igual a “9”

Y también podríamos hacer lo opuesto a lo que hicimos anteriormente, convertir un número a una
cadena dependiendo de la base.
int num = 255;
QString str = QString::number(d, 16);
// El valor de str es FF por la conversión del número 255 a hexadecimal (16)

QString tambiém tiene 4 métodos que nos van a permitir retornar una cadena de tipo const char *:

str.toAscii(); retorna una cadena de 8 bits de codificación ASCII.

str.toLatin1(); retorna una cadena de 8 bits de codificación Latin-1 (ISO 8859-1).

str.toUtf8(); retorna una cadena de 8 bits de codificación UTF-8.

El uso de UTF-8 es importántísimo para la internacionalización, ya que es un estándar y un


formato para codificar caracteres Unicode (Como explicamos anteriormente) utilizando bytes de 1
a 4 por carácter. UTF-8 nos va a permitir tener compatibilidad entre programas y soportar
múltiples caracteres.

str.toLocal8Bit(); retorna una cadena de 8 bits usando el sistema de codificación local.

La clase QString (h p://qt.nokia.com/doc/4.6/qstring.html) tiene muchísimas más funcionalidades,


miembros y métodos avanzados como pueden apreciar en la documentación oficial de QT.

QChar (h p://qt.nokia.com/doc/4.6/qchar.html)es una clase que nos permite definir caracteres


Unicode de 16 bits.

QChar similar a QString provee funciones que permiten convertir de y hacia otro formato y
también funciones que permiten comprobar si el caracter es de cierto tipo de dato o formato.

Todas estas funciones retornan True si el caracter es de cierto tipo de dato, de lo contrario retornan
False.

isNull(): // Si es nulo.

isPrint(); // Si es cualquier tipo de carácter que se pueda imprimir.

isPunct(); // Si es cualquier símbolo de puntuación.

isMark(); // Si es una marca Unicode (h p://qt.nokia.com/doc/4.6/qchar.html#Category-enum).


file:///C:/Users/Manuel/Desktop/Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre.html 3/10
22/3/2019 Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre

isLe er(); // Si es letra.

isNumber(); // Si es número.

isLe erOrNumber(); // Si es letra o número.

isDigit(); // Si es un dígito decimal.

isSymbol(); // Si es un símbolo.

Otras funciones importantes:

toUpper(); // Convierte un caracter a mayúscula.

toLower(); // Convierte un caracter a minúscula.

category(); // Retorna la categoría Unicode a la que pertenece el caracter.

Unicode(); // Retorna una referencia al valor numérico Unicode del QChar.

QStringList (h p://qt.nokia.com/doc/4.6/qstringlist.html) es una clase que nos permite crear listas


de cadenas(strings).

QStringList es una subclase de QList que usa el mismo método de manejo de arrays que C++, es
decir, implementa un array de punteros.

Esta clase permite un acceso rápido a los elementos de la lista por medio de índices y permite
realizar la tareas comunes de inserción, eliminación, agrupación, ordenación y búsqueda de
elementos.

Debemos incluir la clase:

1 #include <QStringList>

Para definir una lista de strings:


QStringList idiomas;
idiomas << “English” << “Spanish” << “French” << “German” << “Japanese” << “Chinese”;

Por medio de índices es que podemos acceder a los elementos de la lista y tenemos 2 opciones:

Usar el operador [], que permite acceder a los elementos y asignar, modificar valores a los mismos:
strList[indice];

Y para un acceso de solo lectura también se puede usar at():


strList.at(indice);

at() es más rápido que [] puesto que no realiza lo que Qt llama una “deep copy” que lo que hace es
duplicar un objeto, en vez de eso realiza una “shallow copy” que es simplemente una referencia a
un objeto.

Una “deep copy” consume mucho más memoria y CPU y por el contrario una “shallow copy” es
mucho más rápida puesto que solo implica fijar un puntero.

Vamos a revisar los métodos más importantes de QStringList.

file:///C:/Users/Manuel/Desktop/Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre.html 4/10
22/3/2019 Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre

Para ordenar los elementos de la lista:


strList.sort();

Para eliminar elementos:

removeAt(indice); // Elimina el elemento del indice indicado.

removeFirst(); // Elimina el primer elemento de la lista

removeLast(); // Elimina el último elemento de la lista

removeOne(“cadena”); Elimina el primer elemento que contenga la cadena que se especifica.

removeAll(“cadena”); // Elimina todos los elementos que contengan la cadena que se especifica.

QStringList así como QString también tiene los métodos contains(), indexOf(), lastIndexOf(),
append(), prepend(), insert(),replace(), isEmpty() que vimos anteriormente y tienen la misma
funcionalidad y comportamiento.

Para juntar todos los elementos de una lista en una cadena:


QString str = strList.join(“,”); // En este caso separamos los elementos de la lista de cadenas con
comas.

Para romper una cadena y convertirla en una lista de cadenas:


QStringList strList;
strList = str.split(“,”); // Asumiento que str es una cadena que contiene elementos separados por
comas.

Existe también el método filter() que retorna una lista de todas las cadenas que contienen una
subcadena especificada.
QStringList strList2;
strList2 = strList.filter(“ish”); // Según nuestra lista creada, strList2 contendría los elementos
English y Spanish.

Para reemplazar una cadena dentro de otra, en una lisa de cadenas:


strList.replaceInStrings(“i”, “e”);
// Reemplaza todas las i por e en todos las cadenas de la lista.

Bueno y para terminar que mejor que un pedazo de código que permite comprobar todo lo
descrito.

Estoy usando QDebug, una clase de Qt que nos sirve para depurar el programa. Comúnmente
llamado el debugging.

Mejor dicho, para ir mostrando la salida que produce el código del programa.

Lo que retorna cada operación está con comentarios.

Enjoy:

1 #include <QtGui/QApplication>
2 #include <QString>
3 #include <QStringList>
4 #include <QDebug>
5
6 int main(int argc, char *argv[])
file:///C:/Users/Manuel/Desktop/Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre.html 5/10
22/3/2019 Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre

7 {
8 QApplication app(argc, argv);
9
10 /********* Funcionamiento de QString *********/
11 QString str("soy usuario ");
12
13 str.append("de KDE ");
14 qDebug() << str; // "soy usuario de KDE "
15
16 str.prepend("Desde hace 3 años, ");
17 qDebug() << str; // "Desde hace 3 años, soy usuario de KDE "
18
19 str.replace(13, 4, " meses");
20 str.replace(37, 3, " OpenSuse");
21 qDebug() << str; // "Desde hace 3 meses, soy usuario de OpenSuse "
22
23 str.insert(46," y Digikam.");
24 qDebug() << str; // "Desde hace 3 mesess, soy usuario de OpenSuse y
25
26 str.remove(0,21);
27 qDebug() << str; // " soy usuario de OpenSuse y Digikam. "
28
29 str.resize(25);
30 qDebug() << str; // " soy usuario de OpenSuse"
31
32 QString str2 = " Espacios en blanco al inicio y fin ";
33 str2.trimmed();
34 qDebug() << str2; // " Espacios en blanco al inicio y fin "
35
36 QString str3 = "Open Source";
37 int i = 0;
38
39 while ((i = str3.indexOf("e", i)) != -1) {
40 qDebug() << "La letra e se encuentra en la posicion " << i;
41 ++i;
42 }
43 // La letra e se encuentra en la posicion 2
44 // La letra e se encuentra en la posicion 10
45
46 QString str4 = "Konsole";
47 qDebug() << str4.lastIndexOf("o"); // 4
48
49 QString str5 = "Software Libre";
50 qDebug() << str5.isEmpty(); // false
51 qDebug() << str5.contains("libre", Qt::CaseInsensitive); // true
52
53 QString str6;
54 int j = 9999999;
55 str6.append(QString("%1").arg(j));
56 qDebug() << str6; // "9999999"
57
58 QString str7 = "Amarok";
59 qDebug() << str7.startsWith("Ama"); // true
60 qDebug() << str7.endsWith("rok"); // true
61
62 str7.clear();
63 qDebug() << str7; // "" cadena vacía
64
65 QString str8;
66 str8.setNum(15);
67 qDebug() << str8; // "15"
file:///C:/Users/Manuel/Desktop/Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre.html 6/10
22/3/2019 Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre

68
69 QString str10 = "2010.03";
70 float a = str10.toFloat();
71 qDebug() << a; // 2010.03
72
73 QString str11 = "12345789";
74 int b = str11.toInt();
75 qDebug() << b; // 12345789
76
77 QString str12 = "FFF";
78 bool ok;
79 int c = str12.toInt(&ok, 16);
80 qDebug() << c; // 4095
81
82 QString str13 = QString::number(9.0);
83 qDebug() << str13; // "9"
84
85 int d = 255;
86 QString str14 = QString::number(d, 16);
87 qDebug() << str14; // "ff"
88
89 /********* Funcionamiento de QChar *********/
90
91 QChar chr = 'R';
92 qDebug() << chr.isNull(); // false
93 qDebug() << chr.isPrint(); // true
94 qDebug() << chr.isPunct(); // false
95 qDebug() << chr.isMark(); // false
96 qDebug() << chr.isLetter(); // true
97 qDebug() << chr.isNumber(); // false
98 qDebug() << chr.isLetterOrNumber(); // true
99 qDebug() << chr.isDigit(); // false
100 qDebug() << chr.isSymbol(); // false
101
102 qDebug() << chr.toLower(); // retorna 'r'
103 qDebug() << chr.toUpper(); // 'R' nuevamente
104
105 qDebug() << chr.category(); // 15, categoria Unicode del caracter
106 qDebug() << chr.unicode(); // 82, valor numérico Unicode del caracte
107
108 /********* Funcionamiento de QStringList *********/
109
110 QStringList idiomas;
111 idiomas << "English" << "Spanish" << "French" << "German" << "Japane
112
113 if ( idiomas[1] == "Spanish" ) {
114 qDebug() << "Si existe Spanish";
115 } else {
116 qDebug() << "No existe";
117 }
118 // Si existe Spanish
119
120 for (int i = 0; i < idiomas.size(); ++i) {
121 qDebug() << idiomas.at(i); //
122 }
123 // "English"
124 // "Spanish"
125 // "French"
126 // "German"
127 // "Japanese"
128 // "German"
file:///C:/Users/Manuel/Desktop/Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre.html 7/10
22/3/2019 Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre

129 // "Chinese"
130
131 QString str15 = idiomas.join(",");
132 qDebug() << str15; // "English,Spanish,French,German,Japanese,German
133
134 QStringList strList;
135 strList = str15.split(",");
136 qDebug() << strList; // ("English", "Spanish", "French", "German", "
137
138 QStringList strList2;
139 strList2 = strList.filter("ish");
140 qDebug() << strList2; // ("English", "Spanish")
141
142 strList2.replaceInStrings("i","e");
143 qDebug() << strList2; // ("Englesh", "Spanesh")
144
145 idiomas.sort();
146 qDebug() << idiomas; // ("Chinese", "English", "French", "German", "G
147
148 idiomas.removeAt(1);
149 qDebug() << idiomas; // ("Chinese", "French", "German", "German", "J
150
151 idiomas.removeFirst();
152 qDebug() << idiomas; // ("French", "German", "German", "Japanese", "
153
154 idiomas.removeLast();
155 qDebug() << idiomas; // ("French", "German", "German", "Japanese")
156
157 idiomas.removeOne("French");
158 qDebug() << idiomas; // ("German", "German", "Japanese")
159
160 idiomas.removeAll("German");
161 qDebug() << idiomas; // ("Japanese")
162
163 return app.exec();
164 }

El siguiente post será acerca de QByteArray.

Advertisements
Posted on March 11, 2010February 15, 2012 by Ronny YabarPosted in QtTagged Programación en
Qt, QString, Qt, Strings en Qt.

Related

Nokia Qt SDK - Desarrollo de Software para móviles.In "Nokia"

Cálculo mental con Qt: QTableWidget, QTimer y LayoutsIn "Qt"

QGraphicsViewIn "Qt"

file:///C:/Users/Manuel/Desktop/Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre.html 8/10
22/3/2019 Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre

4 thoughts on “Manejo de Strings con Qt – QString ,


QChar, QStringList”

1. Yoni says:
March 24, 2010 at 5:04 pm
Excelente, segui publicando cosas de QT que son excelentes. Me ayudo mucho. Muchas gracias

Reply
2. Erick Aldi says:
June 14, 2012 at 2:13 am
Gracias por tu aporte! esta muy completo y me ha sacado de apuros! salu2

Reply
3. Pedro says:
September 15, 2016 at 4:14 am
Excelente, muy completo felicitaciones, le animo a continuar compartiendo sus conocimientos,
todo me fue de mucha ayuda, Gracias

Reply
4. orley says:
November 14, 2017 at 7:12 pm
Muchas gracias por hacer esto, es de mucha ayuda

Reply

Blog at WordPress.com.

Follow

Imaginemos un mundo libre


Customize
Follow
Sign up
Log in
Copy shortlink
Report this content
Manage subscriptions
Collapse this bar

Follow

Imaginemos un mundo libre


Customize
Follow
file:///C:/Users/Manuel/Desktop/Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre.html 9/10
22/3/2019 Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre

Sign up
Log in
Copy shortlink
Report this content
Manage subscriptions
Collapse this bar

%d bloggers like this:

file:///C:/Users/Manuel/Desktop/Manejo de Strings con Qt – QString , QChar, QStringList – Imaginemos un mundo libre.html 10/10

Vous aimerez peut-être aussi