На этом шаге рассмотрим класс 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(), возвращающих булевы значения.
На следующем шаге рассмотрим редактор текста.