File indexing completed on 2026-09-18 09:27:00
0001
0002
0003
0004
0005 #ifndef QPLAINTEXTEDIT_H
0006 #define QPLAINTEXTEDIT_H
0007
0008 #include <QtWidgets/qtwidgetsglobal.h>
0009 #include <QtWidgets/qtextedit.h>
0010
0011 #include <QtWidgets/qabstractscrollarea.h>
0012 #include <QtGui/qtextdocument.h>
0013 #include <QtGui/qtextoption.h>
0014 #include <QtGui/qtextcursor.h>
0015 #include <QtGui/qtextformat.h>
0016 #include <QtGui/qabstracttextdocumentlayout.h>
0017
0018 QT_REQUIRE_CONFIG(textedit);
0019
0020 QT_BEGIN_NAMESPACE
0021
0022 class QStyleSheet;
0023 class QTextDocument;
0024 class QMenu;
0025 class QPlainTextEditPrivate;
0026 class QMimeData;
0027 class QPagedPaintDevice;
0028 class QRegularExpression;
0029
0030 class Q_WIDGETS_EXPORT QPlainTextEdit : public QAbstractScrollArea
0031 {
0032 Q_OBJECT
0033 Q_DECLARE_PRIVATE(QPlainTextEdit)
0034 Q_PROPERTY(bool tabChangesFocus READ tabChangesFocus WRITE setTabChangesFocus)
0035 Q_PROPERTY(QString documentTitle READ documentTitle WRITE setDocumentTitle)
0036 Q_PROPERTY(bool undoRedoEnabled READ isUndoRedoEnabled WRITE setUndoRedoEnabled)
0037 Q_PROPERTY(LineWrapMode lineWrapMode READ lineWrapMode WRITE setLineWrapMode)
0038 QDOC_PROPERTY(QTextOption::WrapMode wordWrapMode READ wordWrapMode WRITE setWordWrapMode)
0039 Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
0040 Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText NOTIFY textChanged USER true)
0041 Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode)
0042 Q_PROPERTY(qreal tabStopDistance READ tabStopDistance WRITE setTabStopDistance)
0043 Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth)
0044 Q_PROPERTY(Qt::TextInteractionFlags textInteractionFlags READ textInteractionFlags
0045 WRITE setTextInteractionFlags)
0046 Q_PROPERTY(int blockCount READ blockCount)
0047 Q_PROPERTY(int maximumBlockCount READ maximumBlockCount WRITE setMaximumBlockCount)
0048 Q_PROPERTY(bool backgroundVisible READ backgroundVisible WRITE setBackgroundVisible)
0049 Q_PROPERTY(bool centerOnScroll READ centerOnScroll WRITE setCenterOnScroll)
0050 Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText)
0051 public:
0052 enum LineWrapMode {
0053 NoWrap,
0054 WidgetWidth
0055 };
0056 Q_ENUM(LineWrapMode)
0057
0058 explicit QPlainTextEdit(QWidget *parent = nullptr);
0059 explicit QPlainTextEdit(const QString &text, QWidget *parent = nullptr);
0060 virtual ~QPlainTextEdit();
0061
0062 void setDocument(QTextDocument *document);
0063 QTextDocument *document() const;
0064
0065 void setPlaceholderText(const QString &placeholderText);
0066 QString placeholderText() const;
0067
0068 void setTextCursor(const QTextCursor &cursor);
0069 QTextCursor textCursor() const;
0070
0071 bool isReadOnly() const;
0072 void setReadOnly(bool ro);
0073
0074 void setTextInteractionFlags(Qt::TextInteractionFlags flags);
0075 Qt::TextInteractionFlags textInteractionFlags() const;
0076
0077 void mergeCurrentCharFormat(const QTextCharFormat &modifier);
0078 void setCurrentCharFormat(const QTextCharFormat &format);
0079 QTextCharFormat currentCharFormat() const;
0080
0081 bool tabChangesFocus() const;
0082 void setTabChangesFocus(bool b);
0083
0084 inline void setDocumentTitle(const QString &title)
0085 { document()->setMetaInformation(QTextDocument::DocumentTitle, title); }
0086 inline QString documentTitle() const
0087 { return document()->metaInformation(QTextDocument::DocumentTitle); }
0088
0089 inline bool isUndoRedoEnabled() const
0090 { return document()->isUndoRedoEnabled(); }
0091 inline void setUndoRedoEnabled(bool enable)
0092 { document()->setUndoRedoEnabled(enable); }
0093
0094 inline void setMaximumBlockCount(int maximum)
0095 { document()->setMaximumBlockCount(maximum); }
0096 inline int maximumBlockCount() const
0097 { return document()->maximumBlockCount(); }
0098
0099
0100 LineWrapMode lineWrapMode() const;
0101 void setLineWrapMode(LineWrapMode mode);
0102
0103 QTextOption::WrapMode wordWrapMode() const;
0104 void setWordWrapMode(QTextOption::WrapMode policy);
0105
0106 void setBackgroundVisible(bool visible);
0107 bool backgroundVisible() const;
0108
0109 void setCenterOnScroll(bool enabled);
0110 bool centerOnScroll() const;
0111
0112 bool find(const QString &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags());
0113 #if QT_CONFIG(regularexpression)
0114 bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags());
0115 #endif
0116
0117 inline QString toPlainText() const
0118 { return document()->toPlainText(); }
0119
0120 void ensureCursorVisible();
0121
0122 virtual QVariant loadResource(int type, const QUrl &name);
0123 #ifndef QT_NO_CONTEXTMENU
0124 QMenu *createStandardContextMenu();
0125 QMenu *createStandardContextMenu(const QPoint &position);
0126 #endif
0127
0128 QTextCursor cursorForPosition(const QPoint &pos) const;
0129 QRect cursorRect(const QTextCursor &cursor) const;
0130 QRect cursorRect() const;
0131
0132 QString anchorAt(const QPoint &pos) const;
0133
0134 bool overwriteMode() const;
0135 void setOverwriteMode(bool overwrite);
0136
0137 qreal tabStopDistance() const;
0138 void setTabStopDistance(qreal distance);
0139
0140 int cursorWidth() const;
0141 void setCursorWidth(int width);
0142
0143 void setExtraSelections(const QList<QTextEdit::ExtraSelection> &selections);
0144 QList<QTextEdit::ExtraSelection> extraSelections() const;
0145
0146 void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor);
0147
0148 bool canPaste() const;
0149
0150 void print(QPagedPaintDevice *printer) const;
0151
0152 int blockCount() const;
0153 QVariant inputMethodQuery(Qt::InputMethodQuery property) const override;
0154 Q_INVOKABLE QVariant inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const;
0155
0156 public Q_SLOTS:
0157
0158 void setPlainText(const QString &text);
0159
0160 #ifndef QT_NO_CLIPBOARD
0161 void cut();
0162 void copy();
0163 void paste();
0164 #endif
0165
0166 void undo();
0167 void redo();
0168
0169 void clear();
0170 void selectAll();
0171
0172 void insertPlainText(const QString &text);
0173
0174 void appendPlainText(const QString &text);
0175 void appendHtml(const QString &html);
0176
0177 void centerCursor();
0178
0179 void zoomIn(int range = 1);
0180 void zoomOut(int range = 1);
0181
0182 Q_SIGNALS:
0183 void textChanged();
0184 void undoAvailable(bool b);
0185 void redoAvailable(bool b);
0186 void copyAvailable(bool b);
0187 void selectionChanged();
0188 void cursorPositionChanged();
0189
0190 void updateRequest(const QRect &rect, int dy);
0191 void blockCountChanged(int newBlockCount);
0192 void modificationChanged(bool);
0193
0194 protected:
0195 virtual bool event(QEvent *e) override;
0196 virtual void timerEvent(QTimerEvent *e) override;
0197 virtual void keyPressEvent(QKeyEvent *e) override;
0198 virtual void keyReleaseEvent(QKeyEvent *e) override;
0199 virtual void resizeEvent(QResizeEvent *e) override;
0200 virtual void paintEvent(QPaintEvent *e) override;
0201 virtual void mousePressEvent(QMouseEvent *e) override;
0202 virtual void mouseMoveEvent(QMouseEvent *e) override;
0203 virtual void mouseReleaseEvent(QMouseEvent *e) override;
0204 virtual void mouseDoubleClickEvent(QMouseEvent *e) override;
0205 virtual bool focusNextPrevChild(bool next) override;
0206 #ifndef QT_NO_CONTEXTMENU
0207 virtual void contextMenuEvent(QContextMenuEvent *e) override;
0208 #endif
0209 #if QT_CONFIG(draganddrop)
0210 virtual void dragEnterEvent(QDragEnterEvent *e) override;
0211 virtual void dragLeaveEvent(QDragLeaveEvent *e) override;
0212 virtual void dragMoveEvent(QDragMoveEvent *e) override;
0213 virtual void dropEvent(QDropEvent *e) override;
0214 #endif
0215 virtual void focusInEvent(QFocusEvent *e) override;
0216 virtual void focusOutEvent(QFocusEvent *e) override;
0217 virtual void showEvent(QShowEvent *) override;
0218 virtual void changeEvent(QEvent *e) override;
0219 #if QT_CONFIG(wheelevent)
0220 virtual void wheelEvent(QWheelEvent *e) override;
0221 #endif
0222
0223 virtual QMimeData *createMimeDataFromSelection() const;
0224 virtual bool canInsertFromMimeData(const QMimeData *source) const;
0225 virtual void insertFromMimeData(const QMimeData *source);
0226
0227 virtual void inputMethodEvent(QInputMethodEvent *) override;
0228
0229 QPlainTextEdit(QPlainTextEditPrivate &dd, QWidget *parent);
0230
0231 virtual void scrollContentsBy(int dx, int dy) override;
0232 virtual void doSetTextCursor(const QTextCursor &cursor);
0233
0234 QTextBlock firstVisibleBlock() const;
0235 QPointF contentOffset() const;
0236 QRectF blockBoundingRect(const QTextBlock &block) const;
0237 QRectF blockBoundingGeometry(const QTextBlock &block) const;
0238 QAbstractTextDocumentLayout::PaintContext getPaintContext() const;
0239
0240 void zoomInF(float range);
0241
0242 private:
0243 Q_DISABLE_COPY(QPlainTextEdit)
0244
0245 friend class QPlainTextEditControl;
0246 };
0247
0248
0249 class QPlainTextDocumentLayoutPrivate;
0250 class Q_WIDGETS_EXPORT QPlainTextDocumentLayout : public QAbstractTextDocumentLayout
0251 {
0252 Q_OBJECT
0253 Q_DECLARE_PRIVATE(QPlainTextDocumentLayout)
0254 Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth)
0255
0256 public:
0257 QPlainTextDocumentLayout(QTextDocument *document);
0258 ~QPlainTextDocumentLayout();
0259
0260 void draw(QPainter *, const PaintContext &) override;
0261 int hitTest(const QPointF &, Qt::HitTestAccuracy ) const override;
0262
0263 int pageCount() const override;
0264 QSizeF documentSize() const override;
0265
0266 QRectF frameBoundingRect(QTextFrame *) const override;
0267 QRectF blockBoundingRect(const QTextBlock &block) const override;
0268
0269 void ensureBlockLayout(const QTextBlock &block) const;
0270
0271 void setCursorWidth(int width);
0272 int cursorWidth() const;
0273
0274 void requestUpdate();
0275
0276 protected:
0277 void documentChanged(int from, int , int charsAdded) override;
0278
0279
0280 private:
0281 void setTextWidth(qreal newWidth);
0282 qreal textWidth() const;
0283 void layoutBlock(const QTextBlock &block);
0284 qreal blockWidth(const QTextBlock &block);
0285
0286 QPlainTextDocumentLayoutPrivate *priv() const;
0287
0288 friend class QPlainTextEdit;
0289 friend class QPlainTextEditPrivate;
0290 };
0291
0292 QT_END_NAMESPACE
0293
0294 #endif