Шаг 47.
Библиотека Qt.
Класс QLineEdit

    На этом шаге рассмотрим класс QLineEdit однострочного текстового поля.

    Группа виджетов элементов ввода представляет собой основу для ввода и редактирования данных — текста и чисел — пользователем. Большая часть элементов ввода может работать с буфером обмена и поддерживает технологию перетаскивания (drag & drop), что избавляет разработчика от дополнительной реализации. Текст можно выделять с помощью мыши, клавиатуры и контекстного меню.

    Этот виджет является самым простым элементом ввода. Класс QLineEdit однострочного текстового поля определен в заголовочном файле QLineEdit.

    Текстовое поле состоит из прямоугольной области для ввода строки текста, поэтому не следует использовать этот виджет в тех случаях, когда требуется вводить более одной строки текста. Для ввода многострочного текста имеется класс QTextEdit.

    Текст, находящийся в виджете, возвращает метод text(). Если содержимое виджета изменилось, то отправляется сигнал textChanged(). Сигнал returnPressed() уведомляет о нажатии пользователем клавиши Enter.

    Вызов метода setReadOnly() с параметром true устанавливает режим "только для чтения", в котором пользователь может только просматривать текст, но не редактировать. Текст для инициализации виджета можно передать в слот setText().

    Для однострочного текстового поля можно включить режим ввода пароля, который устанавливается вызовом метода setEchoMode() с флагом Password. В результате этого вводимые символы не отображаются, а заменяются символом *.

    Окно программы, показанное на рис. 1, имеет два однострочных поля, одно из которых установлено в режим ввода пароля. Вводимый в это поле текст отображается в виджете надписи.


Рис.1. Пример однострочных полей ввода

    В листинге приводится текст файла приложения, окно которого показано на рис. 1:

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QVBoxLayout>
int main (int argc, char** argv)
{
    QApplication app(argc, argv);
    app.setApplicationDisplayName("Однострочные поля ввода");
    QWidget wgt;
    //создается виджет надписи (указатель plDisplay)
    QLabel* plDisplay = new QLabel;
    //метод setFrameStyle() устанавливает стиль рамки
    plDisplay->setFrameStyle(QFrame::Box | QFrame::Raised);
    //метод setLineWidth() устанавливает толщину рамки
    plDisplay->setLineWidth(2);
    //высота виджета надписи фиксируется с помощью метода setFixedHeight()
    plDisplay->setFixedHeight(50);
    //создается виджет надписи (указатель plText)
    QLabel* plText = new QLabel("&Текст:");
    //создается виджет однострочного текстового
    //поля ввода (указатель pleText)
    QLineEdit* pleText = new QLineEdit;
    //надпись plText связывается с виджетом однострочного
    //текстового поля методом setBuddy()
    plText->setBuddy(pleText);
    //сигнал textChanged() виджета текстового поля pleText
    //соединяется со слотом setText() виджета надписи
    //plDisplay для отображения вводимого текста
    QObject::connect(pleText, SIGNAL(textChanged(const QString&)),
                     plDisplay, SLOT(setText(const QString&)));
    QLabel* plPassword = new QLabel("&Пароль:");
    QLineEdit* plePassword = new QLineEdit;
    plPassword->setBuddy(plePassword);
    plePassword->setEchoMode(QLineEdit::Password);
    QObject::connect(plePassword, SIGNAL(textChanged(const QString&)),
                     plDisplay, SLOT(setText(const QString&)));
    //виджеты размещаются вертикально при помощи
    //объекта класса QVBoxLayout
    QVBoxLayout* pvbxLayout = new QVBoxLayout;
    pvbxLayout->addWidget(plDisplay);
    pvbxLayout->addWidget(plText);
    pvbxLayout->addWidget(pleText);
    pvbxLayout->addWidget(plPassword);
    pvbxLayout->addWidget(plePassword);
    wgt.setLayout(pvbxLayout);
    wgt.show();
    return app.exec();
}

    Файлы приложения можно взять здесь.

    Количество вводимых символов можно ограничить методом setMaxLength(), передав в него целое значение, ограничивающее максимальную длину строки. Для получения текущего максимального значения длины существует метод maxLength().

    Класс QLineEdit предоставляет следующие слоты для работы с буфером обмена:

    Метод undo() отменяет последнюю проделанную операцию, а метод redo() повторяет последнюю отмененную. Узнать, возможно ли воспользоваться операциями отмены и повтора, можно с помощью методов isUndoAvailable() и isRedoAvailable(), возвращающих булевы значения.

    На следующем шаге рассмотрим редактор текста.




Предыдущий шаг Содержание Следующий шаг