1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtWidgets module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#ifndef QLINEEDIT_H
41#define QLINEEDIT_H
42
43#include <QtWidgets/qtwidgetsglobal.h>
44#include <QtWidgets/qframe.h>
45#include <QtGui/qtextcursor.h>
46#include <QtCore/qstring.h>
47#include <QtCore/qmargins.h>
48
49QT_REQUIRE_CONFIG(lineedit);
50
51QT_BEGIN_NAMESPACE
52
53class QValidator;
54class QMenu;
55class QLineEditPrivate;
56class QCompleter;
57class QStyleOptionFrame;
58class QAbstractSpinBox;
59class QDateTimeEdit;
60class QIcon;
61class QToolButton;
62
63class Q_WIDGETS_EXPORT QLineEdit : public QWidget
64{
65 Q_OBJECT
66
67 Q_PROPERTY(QString inputMask READ inputMask WRITE setInputMask)
68 Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged USER true)
69 Q_PROPERTY(int maxLength READ maxLength WRITE setMaxLength)
70 Q_PROPERTY(bool frame READ hasFrame WRITE setFrame)
71 Q_PROPERTY(EchoMode echoMode READ echoMode WRITE setEchoMode)
72 Q_PROPERTY(QString displayText READ displayText)
73 Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition)
74 Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment)
75 Q_PROPERTY(bool modified READ isModified WRITE setModified DESIGNABLE false)
76 Q_PROPERTY(bool hasSelectedText READ hasSelectedText)
77 Q_PROPERTY(QString selectedText READ selectedText)
78 Q_PROPERTY(bool dragEnabled READ dragEnabled WRITE setDragEnabled)
79 Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
80 Q_PROPERTY(bool undoAvailable READ isUndoAvailable)
81 Q_PROPERTY(bool redoAvailable READ isRedoAvailable)
82 Q_PROPERTY(bool acceptableInput READ hasAcceptableInput)
83 Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText)
84 Q_PROPERTY(Qt::CursorMoveStyle cursorMoveStyle READ cursorMoveStyle WRITE setCursorMoveStyle)
85 Q_PROPERTY(bool clearButtonEnabled READ isClearButtonEnabled WRITE setClearButtonEnabled)
86public:
87 enum ActionPosition {
88 LeadingPosition,
89 TrailingPosition
90 };
91 Q_ENUM(ActionPosition)
92
93 explicit QLineEdit(QWidget *parent = nullptr);
94 explicit QLineEdit(const QString &, QWidget *parent = nullptr);
95 ~QLineEdit();
96
97 QString text() const;
98
99 QString displayText() const;
100
101 QString placeholderText() const;
102 void setPlaceholderText(const QString &);
103
104 int maxLength() const;
105 void setMaxLength(int);
106
107 void setFrame(bool);
108 bool hasFrame() const;
109
110 void setClearButtonEnabled(bool enable);
111 bool isClearButtonEnabled() const;
112
113 enum EchoMode { Normal, NoEcho, Password, PasswordEchoOnEdit };
114 Q_ENUM(EchoMode)
115 EchoMode echoMode() const;
116 void setEchoMode(EchoMode);
117
118 bool isReadOnly() const;
119 void setReadOnly(bool);
120
121#ifndef QT_NO_VALIDATOR
122 void setValidator(const QValidator *);
123 const QValidator * validator() const;
124#endif
125
126#if QT_CONFIG(completer)
127 void setCompleter(QCompleter *completer);
128 QCompleter *completer() const;
129#endif
130
131 QSize sizeHint() const override;
132 QSize minimumSizeHint() const override;
133
134 int cursorPosition() const;
135 void setCursorPosition(int);
136 int cursorPositionAt(const QPoint &pos);
137
138 void setAlignment(Qt::Alignment flag);
139 Qt::Alignment alignment() const;
140
141 void cursorForward(bool mark, int steps = 1);
142 void cursorBackward(bool mark, int steps = 1);
143 void cursorWordForward(bool mark);
144 void cursorWordBackward(bool mark);
145 void backspace();
146 void del();
147 void home(bool mark);
148 void end(bool mark);
149
150 bool isModified() const;
151 void setModified(bool);
152
153 void setSelection(int, int);
154 bool hasSelectedText() const;
155 QString selectedText() const;
156 int selectionStart() const;
157 int selectionEnd() const;
158 int selectionLength() const;
159
160 bool isUndoAvailable() const;
161 bool isRedoAvailable() const;
162
163 void setDragEnabled(bool b);
164 bool dragEnabled() const;
165
166 void setCursorMoveStyle(Qt::CursorMoveStyle style);
167 Qt::CursorMoveStyle cursorMoveStyle() const;
168
169 QString inputMask() const;
170 void setInputMask(const QString &inputMask);
171 bool hasAcceptableInput() const;
172
173 void setTextMargins(int left, int top, int right, int bottom);
174 void setTextMargins(const QMargins &margins);
175#if QT_DEPRECATED_SINCE(5, 14)
176 QT_DEPRECATED_X("use textMargins()")
177 void getTextMargins(int *left, int *top, int *right, int *bottom) const;
178#endif
179 QMargins textMargins() const;
180
181#if QT_CONFIG(action)
182 using QWidget::addAction;
183 void addAction(QAction *action, ActionPosition position);
184 QAction *addAction(const QIcon &icon, ActionPosition position);
185#endif
186
187public Q_SLOTS:
188 void setText(const QString &);
189 void clear();
190 void selectAll();
191 void undo();
192 void redo();
193#ifndef QT_NO_CLIPBOARD
194 void cut();
195 void copy() const;
196 void paste();
197#endif
198
199public:
200 void deselect();
201 void insert(const QString &);
202#ifndef QT_NO_CONTEXTMENU
203 QMenu *createStandardContextMenu();
204#endif
205
206Q_SIGNALS:
207 void textChanged(const QString &);
208 void textEdited(const QString &);
209 void cursorPositionChanged(int, int);
210 void returnPressed();
211 void editingFinished();
212 void selectionChanged();
213 void inputRejected();
214
215protected:
216 void mousePressEvent(QMouseEvent *) override;
217 void mouseMoveEvent(QMouseEvent *) override;
218 void mouseReleaseEvent(QMouseEvent *) override;
219 void mouseDoubleClickEvent(QMouseEvent *) override;
220 void keyPressEvent(QKeyEvent *) override;
221 void focusInEvent(QFocusEvent *) override;
222 void focusOutEvent(QFocusEvent *) override;
223 void paintEvent(QPaintEvent *) override;
224#if QT_CONFIG(draganddrop)
225 void dragEnterEvent(QDragEnterEvent *) override;
226 void dragMoveEvent(QDragMoveEvent *e) override;
227 void dragLeaveEvent(QDragLeaveEvent *e) override;
228 void dropEvent(QDropEvent *) override;
229#endif
230 void changeEvent(QEvent *) override;
231#ifndef QT_NO_CONTEXTMENU
232 void contextMenuEvent(QContextMenuEvent *) override;
233#endif
234
235 void inputMethodEvent(QInputMethodEvent *) override;
236 void initStyleOption(QStyleOptionFrame *option) const;
237public:
238 QVariant inputMethodQuery(Qt::InputMethodQuery) const override;
239 Q_INVOKABLE QVariant inputMethodQuery(Qt::InputMethodQuery property, QVariant argument) const;
240 bool event(QEvent *) override;
241protected:
242 QRect cursorRect() const;
243
244public:
245
246private:
247 friend class QAbstractSpinBox;
248 friend class QAccessibleLineEdit;
249 friend class QComboBox;
250#ifdef QT_KEYPAD_NAVIGATION
251 friend class QDateTimeEdit;
252#endif
253 Q_DISABLE_COPY(QLineEdit)
254 Q_DECLARE_PRIVATE(QLineEdit)
255 Q_PRIVATE_SLOT(d_func(), void _q_handleWindowActivate())
256 Q_PRIVATE_SLOT(d_func(), void _q_textEdited(const QString &))
257 Q_PRIVATE_SLOT(d_func(), void _q_cursorPositionChanged(int, int))
258 Q_PRIVATE_SLOT(d_func(), void _q_waitTouchPopup())
259#if QT_CONFIG(completer)
260 Q_PRIVATE_SLOT(d_func(), void _q_completionHighlighted(const QString &))
261#endif
262#ifdef QT_KEYPAD_NAVIGATION
263 Q_PRIVATE_SLOT(d_func(), void _q_editFocusChange(bool))
264#endif
265 Q_PRIVATE_SLOT(d_func(), void _q_selectionChanged())
266 Q_PRIVATE_SLOT(d_func(), void _q_updateNeeded(const QRect &))
267 Q_PRIVATE_SLOT(d_func(), void _q_textChanged(const QString &))
268 Q_PRIVATE_SLOT(d_func(), void _q_clearButtonClicked())
269};
270
271QT_END_NAMESPACE
272
273#endif // QLINEEDIT_H
274