En esta página

Ejemplo de edición de líneas

El ejemplo de edición de líneas demuestra las múltiples formas en que puede utilizarse QLineEdit y muestra los efectos de varias propiedades y validadores en la entrada y salida suministradas por el usuario.

Aplicación con varios tipos y usos de ediciones de línea

El ejemplo consiste en una única clase Window, que contiene una selección de ediciones de línea con diferentes restricciones de entrada y propiedades de visualización que pueden modificarse seleccionando elementos de cuadros combinados. La presentación conjunta de estos elementos ayuda a los desarrolladores a elegir las propiedades adecuadas para las ediciones de línea y facilita la comparación de los efectos de cada validador sobre la entrada del usuario.

Definición de la clase Window

La clase Window hereda de QWidget y contiene un constructor y varias ranuras:

class Window : public QWidget
{
    Q_OBJECT

public:
    Window(QWidget *parent = nullptr);

public slots:
    void echoChanged(int);
    void validatorChanged(int);
    void alignmentChanged(int);
    void inputMaskChanged(int);
    void accessChanged(int);

private:
    QLineEdit *echoLineEdit;
    QLineEdit *validatorLineEdit;
    QLineEdit *alignmentLineEdit;
    QLineEdit *inputMaskLineEdit;
    QLineEdit *accessLineEdit;
};

Las ranuras se utilizan para actualizar el tipo de validador utilizado para una determinada edición de línea cuando se ha seleccionado un nuevo validador en el combobox asociado. Las ediciones de línea se almacenan en la ventana para su uso en estas ranuras.

Implementación de la clase Window

El constructor Window se utiliza para configurar las ediciones de línea, los validadores y los comboboxes, conectar las señales de los comboboxes a las ranuras de la clase Window y organizar los widgets hijos en diseños.

Empezaremos construyendo un group box que contenga una etiqueta, un combobox y un editor de línea para poder demostrar la propiedad QLineEdit::echoMode:

Window::Window(QWidget *parent)
    : QWidget(parent)
{
    QGroupBox *echoGroup = new QGroupBox(tr("Echo"));

    QLabel *echoLabel = new QLabel(tr("Mode:"));
    QComboBox *echoComboBox = new QComboBox;
    echoComboBox->addItem(tr("Normal"));
    echoComboBox->addItem(tr("Password"));
    echoComboBox->addItem(tr("PasswordEchoOnEdit"));
    echoComboBox->addItem(tr("No Echo"));

    echoLineEdit = new QLineEdit;
    echoLineEdit->setPlaceholderText("Placeholder Text");
    echoLineEdit->setFocus();

En este punto, ninguno de estos widgets ha sido organizado en layouts. Eventualmente, echoLabel, echoComboBox, y echoLineEdit serán colocados en un diseño vertical dentro de la caja de grupo echoGroup.

Del mismo modo, construimos cuadros de grupo y colecciones de widgets para mostrar los efectos de QIntValidator y QDoubleValidator en el contenido de una edición de línea:

    QGroupBox *validatorGroup = new QGroupBox(tr("Validator"));

    QLabel *validatorLabel = new QLabel(tr("Type:"));
    QComboBox *validatorComboBox = new QComboBox;
    validatorComboBox->addItem(tr("No validator"));
    validatorComboBox->addItem(tr("Integer validator"));
    validatorComboBox->addItem(tr("Double validator"));

    validatorLineEdit = new QLineEdit;
    validatorLineEdit->setPlaceholderText("Placeholder Text");

Otro grupo de widgets muestra la alineación del texto:

    QGroupBox *alignmentGroup = new QGroupBox(tr("Alignment"));

    QLabel *alignmentLabel = new QLabel(tr("Type:"));
    QComboBox *alignmentComboBox = new QComboBox;
    alignmentComboBox->addItem(tr("Left"));
    alignmentComboBox->addItem(tr("Centered"));
    alignmentComboBox->addItem(tr("Right"));

    alignmentLineEdit = new QLineEdit;
    alignmentLineEdit->setPlaceholderText("Placeholder Text");

QLineEdit input masks . Éstos sólo permiten al usuario escribir caracteres en la edición de línea que sigan una especificación simple. Construimos un grupo de widgets para demostrar una selección de máscaras predefinidas:

    QGroupBox *inputMaskGroup = new QGroupBox(tr("Input mask"));

    QLabel *inputMaskLabel = new QLabel(tr("Type:"));
    QComboBox *inputMaskComboBox = new QComboBox;
    inputMaskComboBox->addItem(tr("No mask"));
    inputMaskComboBox->addItem(tr("Phone number"));
    inputMaskComboBox->addItem(tr("ISO date"));
    inputMaskComboBox->addItem(tr("License key"));

    inputMaskLineEdit = new QLineEdit;
    inputMaskLineEdit->setPlaceholderText("Placeholder Text");

Otra característica útil de QLineEdit es su capacidad para hacer que su contenido sea de sólo lectura. Esta propiedad se utiliza para controlar el acceso a una edición de línea en el siguiente grupo de widgets:

    QGroupBox *accessGroup = new QGroupBox(tr("Access"));

    QLabel *accessLabel = new QLabel(tr("Read-only:"));
    QComboBox *accessComboBox = new QComboBox;
    accessComboBox->addItem(tr("False"));
    accessComboBox->addItem(tr("True"));

    accessLineEdit = new QLineEdit;
    accessLineEdit->setPlaceholderText("Placeholder Text");

Ahora que todos los widgets hijos han sido construidos, conectamos las señales de los comboboxes a las ranuras del objeto Window:

    connect(echoComboBox, &QComboBox::activated,
            this, &Window::echoChanged);
    connect(validatorComboBox, &QComboBox::activated,
            this, &Window::validatorChanged);
    connect(alignmentComboBox, &QComboBox::activated,
            this, &Window::alignmentChanged);
    connect(inputMaskComboBox, &QComboBox::activated,
            this, &Window::inputMaskChanged);
    connect(accessComboBox, &QComboBox::activated,
            this, &Window::accessChanged);

Cada una de estas conexiones utiliza la señal QComboBox::activated() que suministra un número entero a la ranura. Esto se utilizará para realizar cambios de forma eficiente en la edición de línea apropiada en cada ranura.

Colocamos cada cuadro combinado, edición de línea y etiqueta en un diseño para cada cuadro de grupo, empezando por el diseño del cuadro de grupo echoGroup:

    QGridLayout *echoLayout = new QGridLayout;
    echoLayout->addWidget(echoLabel, 0, 0);
    echoLayout->addWidget(echoComboBox, 0, 1);
    echoLayout->addWidget(echoLineEdit, 1, 0, 1, 2);
    echoGroup->setLayout(echoLayout);

Los otros diseños se construyen de la misma manera:

    QGridLayout *validatorLayout = new QGridLayout;
    validatorLayout->addWidget(validatorLabel, 0, 0);
    validatorLayout->addWidget(validatorComboBox, 0, 1);
    validatorLayout->addWidget(validatorLineEdit, 1, 0, 1, 2);
    validatorGroup->setLayout(validatorLayout);

    QGridLayout *alignmentLayout = new QGridLayout;
    alignmentLayout->addWidget(alignmentLabel, 0, 0);
    alignmentLayout->addWidget(alignmentComboBox, 0, 1);
    alignmentLayout->addWidget(alignmentLineEdit, 1, 0, 1, 2);
    alignmentGroup-> setLayout(alignmentLayout);

    QGridLayout *inputMaskLayout = new QGridLayout;
    inputMaskLayout->addWidget(inputMaskLabel, 0, 0);
    inputMaskLayout->addWidget(inputMaskComboBox, 0, 1);
    inputMaskLayout->addWidget(inputMaskLineEdit, 1, 0, 1, 2);
    inputMaskGroup->setLayout(inputMaskLayout);

    QGridLayout *accessLayout = new QGridLayout;
    accessLayout->addWidget(accessLabel, 0, 0);
    accessLayout->addWidget(accessComboBox, 0, 1);
    accessLayout->addWidget(accessLineEdit, 1, 0, 1, 2);
    accessGroup->setLayout(accessLayout);

Por último, colocamos cada cuadro de grupo en un diseño de cuadrícula para el objeto Window y establecemos el título de la ventana:

    QGridLayout *layout = new QGridLayout;
    layout->addWidget(echoGroup, 0, 0);
    layout->addWidget(validatorGroup, 1, 0);
    layout->addWidget(alignmentGroup, 2, 0);
    layout->addWidget(inputMaskGroup, 0, 1);
    layout->addWidget(accessGroup, 1, 1);
    setLayout(layout);

    setWindowTitle(tr("Line Edits"));
}

Las ranuras responden a las señales emitidas cuando el usuario cambia los cuadros combinados.

Cuando se cambia el combobox del cuadro de grupo Echo, se llama a la ranura echoChanged():

void Window::echoChanged(int index)
{
    switch (index) {
    case 0:
        echoLineEdit->setEchoMode(QLineEdit::Normal);
        break;
    case 1:
        echoLineEdit->setEchoMode(QLineEdit::Password);
        break;
    case 2:
        echoLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);
        break;
    case 3:
        echoLineEdit->setEchoMode(QLineEdit::NoEcho);
        break;
    }
}

La ranura actualiza la línea de edición en el mismo cuadro de grupo para utilizar un modo de eco que corresponde a la entrada descrita en el combobox.

Cuando se modifica el combobox del cuadro de grupo Validator, se llama a la ranura validatorChanged():

void Window::validatorChanged(int index)
{
    switch (index) {
    case 0:
        validatorLineEdit->setValidator(nullptr);
        break;
    case 1:
        validatorLineEdit->setValidator(new QIntValidator(
            validatorLineEdit));
        break;
    case 2:
        validatorLineEdit->setValidator(new QDoubleValidator(-999.0,
            999.0, 2, validatorLineEdit));
        break;
    }

    validatorLineEdit->clear();
}

La ranura crea un nuevo validador para la edición de línea a utilizar, o elimina el validador en uso llamando a QLineEdit::setValidator() con un puntero cero. En este caso, borramos la edición de línea para asegurarnos de que el nuevo validador recibe inicialmente una entrada válida con la que trabajar.

Cuando se cambia el combobox del cuadro de grupo Alignment, se llama a la ranura alignmentChanged():

void Window::alignmentChanged(int index)
{
    switch (index) {
    case 0:
        alignmentLineEdit->setAlignment(Qt::AlignLeft);
        break;
    case 1:
        alignmentLineEdit->setAlignment(Qt::AlignCenter);
        break;
    case 2:
        alignmentLineEdit->setAlignment(Qt::AlignRight);
        break;
    }
}

Esto cambia la forma en que se muestra el texto en la edición de línea para que se corresponda con la descripción seleccionada en el combobox.

La ranura inputMaskChanged() gestiona los cambios en el cuadro combinado del cuadro de grupo Input Mask:

void Window::inputMaskChanged(int index)
{
    switch (index) {
    case 0:
        inputMaskLineEdit->setInputMask("");
        break;
    case 1:
        inputMaskLineEdit->setInputMask("+99 99 99 99 99;_");
        break;
    case 2:
        inputMaskLineEdit->setInputMask("0000-00-00");
        inputMaskLineEdit->setText("00000000");
        inputMaskLineEdit->setCursorPosition(0);
        break;
    case 3:
        inputMaskLineEdit->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#");
        break;
    }
}

Cada entrada del combobox correspondiente está asociada a una máscara de entrada. Para establecer una nueva máscara, se llama a la función QLineEdit::setInputMask() con una cadena adecuada; la máscara se desactiva si se utiliza una cadena vacía.

La ranura accessChanged() gestiona los cambios en el combobox del cuadro de grupo Access:

void Window::accessChanged(int index)
{
    switch (index) {
    case 0:
        accessLineEdit->setReadOnly(false);
        break;
    case 1:
        accessLineEdit->setReadOnly(true);
        break;
    }
}

Aquí, simplemente asociamos las entradas False y True del combobox con los valores false y true que se pasarán a QLineEdit::setReadOnly(). Esto permite al usuario activar y desactivar la entrada a la línea de edición.

Proyecto de ejemplo @ code.qt.io

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.