QLineEdit y QTextEdit tutorial Qt

Ambos widgets QLineEdit y QTextEdit son utilizados para obtener un texto por parte del usuario, el primero solo permite una sola línea de texto, el segundo por el contrario maneja múltiples líneas de texto, ambos soportan la s características de copiar y pegar, arrastrar y soltar, y revertir cambios, entre otras cosas.

Uso del QLineEdit

Como lo mencionamos previamente este widget esta diseñado para manejar una única línea de texto, podemos indicar el texto que se muestra utilizando el primer parámetro del constructor o usando el método setText() obtenemos el texto escrito usando text(), podemos restringir la cantidad de caracteres admitidos con setMaxLength() y podemos establecer el texto informativo con setPlaceHolder().

QLineEdit *txt = new QLineEdit();                                   
txt->setPlaceholderText("Escribe algo...");                         
txt->setMaxLength(20);                                              
                                                                    
QObject::connect(txt, &QLineEdit::textChanged, [=]() {              
    std::cout << "Text: " << txt->text().toStdString() << std::endl;
});

Este control emite el signal textChanged cada vez que se modifica el texto del mismo, el código que se encuentra al final muestra como conectarnos al respectivo signal usando un lambda, solo mostramos en consola el texto cada vez que este cambia.

QLineEdit control Qt 5.x

Si usamos este widget para obtener una contraseña, sería prudente ocultar dicha información, esto lo haríamos con setEchoMode() de esta manera:

txt->setEchoMode(QLineEdit::Password);

QLineEdit para contraseñas

Para seleccionar el texto completo disponemos del método selectAll(), el texto seleccionado lo podemos obtener con selectedText(), otra opción es indicar los índices inicial y final de la selección, es decir donde comienza y termina la misma, para ello tenemos setSelection(int, int) el primer parámetro, un entero, define el índice inicial el segundo el índice final.

Cuando el texto seleccionado cambia se emite el signal selectionChanged, lo conectamos con un lambda que obtiene el texto seleccionado y lo muestra en la consola de salida.

QObject::connect(txt, &QLineEdit::selectionChanged, [=]() {                      
    std::cout << "Selection: " << txt->selectedText().toStdString() << std::endl;
});

Otros signal interesantes son QLineEdit::cursorPositionChanged emitido cuando cambia la posición del cursor, la línea vertical que indica donde se inserta el texto, además QLineEdit::returnPressed que es emitido cuando se presionan las teclas enter o intro, este widget tiene muchas otras características y funcionalidades puedes ver la documentación para más detalles.

Uso del QTextEdit

Este widget es más avanzado que el anterior, soporta múltiples líneas de texto que pueden ser texto plano o texto enriquecido formateado con HTML 4, usaremos el método setText() para indicar un texto y setHtml() para establecer un texto HTML, con esta última opción podemos agregar tablas o imágenes, y mucho más.

QTextEdit *txt = new QTextEdit();                                     
txt->setHtml("<h1>Hello</h1> <p>Este es un ejemplo</p>");             
                                                                      
QObject::connect(txt, &QTextEdit::textChanged, [=]() {                
    std::cout << "Text: " << txt->toHtml().toStdString() << std::endl;
});

Este widget también emite el signal textChanged como el anterior, para obtener el texto HTML usamos toHtml() si deseamos el texto plano toPlainText().

El QTextEdit puede ser usado de manera avanzada para crear editores de texto complejos, puedes ver los ejemplos oficiales, para usarlo como un editor de texto plano: \Qt5.9.1\Examples\Qt-5.9.1\widgets\mainwindows\mainwindow

QTextEdit para editar texto plano

Como un editor y marcador de código C++, \Qt5.9.1\Examples\Qt-5.9.1\widgets\richtext\syntaxhighlighter

QTextEdit para editar código

Como habrás notado el control es muy versátil y complejo, revisa los ejemplo para entender lo que puedes hacer con él y cómo puedes hacerlo, momento terminamos por hoy.

Comentarios

Temas relacionados

Entradas populares de este blog

tkinter Grid

tkinter Canvas

Histogramas OpenCV Python

Python Binance API