File indexing completed on 2025-11-04 10:23:01
0001
0002
0003
0004 #ifndef QTEXTDOCUMENT_H
0005 #define QTEXTDOCUMENT_H
0006
0007 #include <QtGui/qtguiglobal.h>
0008 #include <QtCore/qobject.h>
0009 #include <QtCore/qsize.h>
0010 #include <QtCore/qrect.h>
0011 #include <QtCore/qvariant.h>
0012 #include <QtGui/qfont.h>
0013 #include <QtCore/qurl.h>
0014 #include <QtCore/qcontainerfwd.h>
0015 Q_MOC_INCLUDE(<QtGui/qtextcursor.h>)
0016
0017 QT_BEGIN_NAMESPACE
0018
0019
0020 class QTextFormatCollection;
0021 class QTextListFormat;
0022 class QRect;
0023 class QPainter;
0024 class QPagedPaintDevice;
0025 class QAbstractTextDocumentLayout;
0026 class QPoint;
0027 class QTextObject;
0028 class QTextFormat;
0029 class QTextFrame;
0030 class QTextBlock;
0031 class QVariant;
0032 class QRectF;
0033 class QTextOption;
0034 class QTextCursor;
0035
0036 namespace Qt
0037 {
0038 #if QT_GUI_REMOVED_SINCE(6, 7)
0039 Q_GUI_EXPORT bool mightBeRichText(const QString&);
0040 #endif
0041 Q_GUI_EXPORT bool mightBeRichText(QAnyStringView);
0042 Q_GUI_EXPORT QString convertFromPlainText(const QString &plain, WhiteSpaceMode mode = WhiteSpacePre);
0043 }
0044
0045 class Q_GUI_EXPORT QAbstractUndoItem
0046 {
0047 public:
0048 virtual ~QAbstractUndoItem();
0049 virtual void undo() = 0;
0050 virtual void redo() = 0;
0051 };
0052
0053 class QTextDocumentPrivate;
0054
0055 class Q_GUI_EXPORT QTextDocument : public QObject
0056 {
0057 Q_OBJECT
0058
0059 Q_PROPERTY(bool undoRedoEnabled READ isUndoRedoEnabled WRITE setUndoRedoEnabled)
0060 Q_PROPERTY(bool modified READ isModified WRITE setModified DESIGNABLE false)
0061 Q_PROPERTY(QSizeF pageSize READ pageSize WRITE setPageSize)
0062 Q_PROPERTY(QFont defaultFont READ defaultFont WRITE setDefaultFont)
0063 Q_PROPERTY(bool useDesignMetrics READ useDesignMetrics WRITE setUseDesignMetrics)
0064 Q_PROPERTY(bool layoutEnabled READ isLayoutEnabled WRITE setLayoutEnabled)
0065 Q_PROPERTY(QSizeF size READ size)
0066 Q_PROPERTY(qreal textWidth READ textWidth WRITE setTextWidth)
0067 Q_PROPERTY(int blockCount READ blockCount)
0068 Q_PROPERTY(qreal indentWidth READ indentWidth WRITE setIndentWidth)
0069 #ifndef QT_NO_CSSPARSER
0070 Q_PROPERTY(QString defaultStyleSheet READ defaultStyleSheet WRITE setDefaultStyleSheet)
0071 #endif
0072 Q_PROPERTY(int maximumBlockCount READ maximumBlockCount WRITE setMaximumBlockCount)
0073 Q_PROPERTY(qreal documentMargin READ documentMargin WRITE setDocumentMargin)
0074 QDOC_PROPERTY(QTextOption defaultTextOption READ defaultTextOption WRITE setDefaultTextOption)
0075 Q_PROPERTY(QUrl baseUrl READ baseUrl WRITE setBaseUrl NOTIFY baseUrlChanged)
0076
0077 public:
0078 explicit QTextDocument(QObject *parent = nullptr);
0079 explicit QTextDocument(const QString &text, QObject *parent = nullptr);
0080 ~QTextDocument();
0081
0082 QTextDocument *clone(QObject *parent = nullptr) const;
0083
0084 bool isEmpty() const;
0085 virtual void clear();
0086
0087 void setUndoRedoEnabled(bool enable);
0088 bool isUndoRedoEnabled() const;
0089
0090 bool isUndoAvailable() const;
0091 bool isRedoAvailable() const;
0092
0093 int availableUndoSteps() const;
0094 int availableRedoSteps() const;
0095
0096 int revision() const;
0097
0098 void setDocumentLayout(QAbstractTextDocumentLayout *layout);
0099 QAbstractTextDocumentLayout *documentLayout() const;
0100
0101 enum MetaInformation {
0102 DocumentTitle,
0103 DocumentUrl,
0104 CssMedia,
0105 FrontMatter,
0106 };
0107 void setMetaInformation(MetaInformation info, const QString &);
0108 QString metaInformation(MetaInformation info) const;
0109
0110 #ifndef QT_NO_TEXTHTMLPARSER
0111 QString toHtml() const;
0112 void setHtml(const QString &html);
0113 #endif
0114
0115 #if QT_CONFIG(textmarkdownwriter) || QT_CONFIG(textmarkdownreader)
0116 enum MarkdownFeature {
0117 MarkdownNoHTML = 0x0020 | 0x0040,
0118 MarkdownDialectCommonMark = 0,
0119 MarkdownDialectGitHub = 0x0004 | 0x0008 | 0x0400 | 0x0100 | 0x0200 | 0x0800 | 0x4000 | 0x100000
0120 };
0121 Q_DECLARE_FLAGS(MarkdownFeatures, MarkdownFeature)
0122 Q_FLAG(MarkdownFeatures)
0123 #endif
0124
0125 #if QT_CONFIG(textmarkdownwriter)
0126 QString toMarkdown(MarkdownFeatures features = MarkdownDialectGitHub) const;
0127 #endif
0128
0129 #if QT_CONFIG(textmarkdownreader)
0130 void setMarkdown(const QString &markdown, MarkdownFeatures features = MarkdownDialectGitHub);
0131 #endif
0132
0133 QString toRawText() const;
0134 QString toPlainText() const;
0135 void setPlainText(const QString &text);
0136
0137 QChar characterAt(int pos) const;
0138
0139 enum FindFlag
0140 {
0141 FindBackward = 0x00001,
0142 FindCaseSensitively = 0x00002,
0143 FindWholeWords = 0x00004
0144 };
0145 Q_DECLARE_FLAGS(FindFlags, FindFlag)
0146
0147 QTextCursor find(const QString &subString, int from = 0, FindFlags options = FindFlags()) const;
0148 QTextCursor find(const QString &subString, const QTextCursor &cursor, FindFlags options = FindFlags()) const;
0149
0150 #if QT_CONFIG(regularexpression)
0151 QTextCursor find(const QRegularExpression &expr, int from = 0, FindFlags options = FindFlags()) const;
0152 QTextCursor find(const QRegularExpression &expr, const QTextCursor &cursor, FindFlags options = FindFlags()) const;
0153 #endif
0154
0155 QTextFrame *frameAt(int pos) const;
0156 QTextFrame *rootFrame() const;
0157
0158 QTextObject *object(int objectIndex) const;
0159 QTextObject *objectForFormat(const QTextFormat &) const;
0160
0161 QTextBlock findBlock(int pos) const;
0162 QTextBlock findBlockByNumber(int blockNumber) const;
0163 QTextBlock findBlockByLineNumber(int blockNumber) const;
0164 QTextBlock begin() const;
0165 QTextBlock end() const;
0166
0167 QTextBlock firstBlock() const;
0168 QTextBlock lastBlock() const;
0169
0170 void setPageSize(const QSizeF &size);
0171 QSizeF pageSize() const;
0172
0173 void setDefaultFont(const QFont &font);
0174 QFont defaultFont() const;
0175
0176 void setSuperScriptBaseline(qreal baseline);
0177 qreal superScriptBaseline() const;
0178
0179 void setSubScriptBaseline(qreal baseline);
0180 qreal subScriptBaseline() const;
0181
0182 void setBaselineOffset(qreal baseline);
0183 qreal baselineOffset() const;
0184
0185 int pageCount() const;
0186
0187 bool isModified() const;
0188
0189 #ifndef QT_NO_PRINTER
0190 void print(QPagedPaintDevice *printer) const;
0191 #endif
0192
0193 enum ResourceType {
0194 UnknownResource = 0,
0195 HtmlResource = 1,
0196 ImageResource = 2,
0197 StyleSheetResource = 3,
0198 MarkdownResource = 4,
0199
0200 UserResource = 100
0201 };
0202 Q_ENUM(ResourceType)
0203
0204 QVariant resource(int type, const QUrl &name) const;
0205 void addResource(int type, const QUrl &name, const QVariant &resource);
0206
0207 using ResourceProvider = std::function<QVariant(const QUrl&)>;
0208
0209 QTextDocument::ResourceProvider resourceProvider() const;
0210 void setResourceProvider(const ResourceProvider &provider);
0211
0212 static QTextDocument::ResourceProvider defaultResourceProvider();
0213 static void setDefaultResourceProvider(const ResourceProvider &provider);
0214
0215 QList<QTextFormat> allFormats() const;
0216
0217 void markContentsDirty(int from, int length);
0218
0219 void setUseDesignMetrics(bool b);
0220 bool useDesignMetrics() const;
0221
0222 void setLayoutEnabled(bool b);
0223 bool isLayoutEnabled() const;
0224
0225 void drawContents(QPainter *painter, const QRectF &rect = QRectF());
0226
0227 void setTextWidth(qreal width);
0228 qreal textWidth() const;
0229
0230 qreal idealWidth() const;
0231
0232 qreal indentWidth() const;
0233 void setIndentWidth(qreal width);
0234
0235 qreal documentMargin() const;
0236 void setDocumentMargin(qreal margin);
0237
0238 void adjustSize();
0239 QSizeF size() const;
0240
0241 int blockCount() const;
0242 int lineCount() const;
0243 int characterCount() const;
0244
0245 #ifndef QT_NO_CSSPARSER
0246 void setDefaultStyleSheet(const QString &sheet);
0247 QString defaultStyleSheet() const;
0248 #endif
0249
0250 void undo(QTextCursor *cursor);
0251 void redo(QTextCursor *cursor);
0252
0253 enum Stacks {
0254 UndoStack = 0x01,
0255 RedoStack = 0x02,
0256 UndoAndRedoStacks = UndoStack | RedoStack
0257 };
0258 void clearUndoRedoStacks(Stacks historyToClear = UndoAndRedoStacks);
0259
0260 int maximumBlockCount() const;
0261 void setMaximumBlockCount(int maximum);
0262
0263 QTextOption defaultTextOption() const;
0264 void setDefaultTextOption(const QTextOption &option);
0265
0266 QUrl baseUrl() const;
0267 void setBaseUrl(const QUrl &url);
0268
0269 Qt::CursorMoveStyle defaultCursorMoveStyle() const;
0270 void setDefaultCursorMoveStyle(Qt::CursorMoveStyle style);
0271
0272 Q_SIGNALS:
0273 void contentsChange(int from, int charsRemoved, int charsAdded);
0274 void contentsChanged();
0275 void undoAvailable(bool);
0276 void redoAvailable(bool);
0277 void undoCommandAdded();
0278 void modificationChanged(bool m);
0279 void cursorPositionChanged(const QTextCursor &cursor);
0280 void blockCountChanged(int newBlockCount);
0281 void baseUrlChanged(const QUrl &url);
0282 void documentLayoutChanged();
0283
0284 public Q_SLOTS:
0285 void undo();
0286 void redo();
0287 void appendUndoItem(QAbstractUndoItem *);
0288 void setModified(bool m = true);
0289
0290 protected:
0291 virtual QTextObject *createObject(const QTextFormat &f);
0292 Q_INVOKABLE virtual QVariant loadResource(int type, const QUrl &name);
0293
0294 QTextDocument(QTextDocumentPrivate &dd, QObject *parent);
0295 private:
0296 Q_DISABLE_COPY(QTextDocument)
0297 Q_DECLARE_PRIVATE(QTextDocument)
0298 friend class QTextObjectPrivate;
0299 };
0300
0301 Q_DECLARE_OPERATORS_FOR_FLAGS(QTextDocument::FindFlags)
0302
0303 QT_END_NAMESPACE
0304
0305 #endif