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