Класс QAbstractTextDocumentLayout
Класс QAbstractTextDocumentLayout — это абстрактный базовый класс, используемый для реализации пользовательских макетов для QTextDocuments. Подробнее...
| Заголовок: | #include <QAbstractTextDocumentLayout> |
| CMake: | find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| Наследуется от: | QObject |
| Наследуется в: |
Примечание: Все функции в этом классе являются повторно входящими.
Типы публичного доступа
| Структура | PaintContext |
| Структура | Selection |
Публичные функции
| QAbstractTextDocumentLayout(QTextDocument *document) | |
| QString | anchorAt(const QPointF &position) const |
| virtual QRectF | blockBoundingRect(const QTextBlock &block) const = 0 |
| QTextBlock | blockWithMarkerAt(const QPointF &pos) const |
| QTextDocument * | document() const |
| virtual QSizeF | documentSize() const = 0 |
| virtual void | draw(QPainter *painter, const QAbstractTextDocumentLayout::PaintContext &context) = 0 |
| QTextFormat | formatAt(const QPointF &pos) const |
| virtual QRectF | frameBoundingRect(QTextFrame *frame) const = 0 |
| QTextObjectInterface * | handlerForObject(int objectType) const |
| virtual int | hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const = 0 |
| QString | imageAt(const QPointF &pos) const |
| virtual int | pageCount() const = 0 |
| QPaintDevice * | paintDevice() const |
| void | registerHandler(int objectType, QObject *component) |
| void | setPaintDevice(QPaintDevice *device) |
| void | unregisterHandler(int objectType, QObject *component = nullptr) |
Сигналы
| void | documentSizeChanged(const QSizeF &newSize) |
| void | pageCountChanged(int newPages) |
| void | update(const QRectF &rect = QRectF(0., 0., 1000000000., 1000000000.)) |
| void | updateBlock(const QTextBlock &block) |
Защищенные функции
| virtual void | documentChanged(int position, int charsRemoved, int charsAdded) = 0 |
| virtual void | drawInlineObject(QPainter *painter, const QRectF &rect, QTextInlineObject object, int posInDocument, const QTextFormat &format) |
| QTextCharFormat | format(int position) |
| virtual void | positionInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format) |
| virtual void | resizeInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format) |
Подробное описание
Стандартный макет, предоставляемый Qt, может обрабатывать простую текстовую обработку, включая встроенные изображения, списки и таблицы.
Некоторые приложения, например, текстовый процессор или приложение DTP, могут потребовать больше функций, чем те, которые предоставляет движок макетов Qt, в этом случае вы можете подклассировать QAbstractTextDocumentLayout, чтобы предоставить пользовательское поведение макета для ваших текстовых документов.
Экземпляр подкласса QAbstractTextDocumentLayout может быть установлен на объект QTextDocument с помощью функции setDocumentLayout().
Вы можете вставлять пользовательские объекты в QTextDocument; подробности см. в описании класса QTextObjectInterface.
См. также QTextObjectInterface.
Документация по функциям-членам
QAbstractTextDocumentLayout::QAbstractTextDocumentLayout(QTextDocument *document)
Создаёт новый макет текстового документа для заданного document.
Изменение размера документаvoid QAbstractTextDocumentLayout::documentSizeChanged(const QSizeF &newSize)
Этот сигнал испускается, когда размер макета документа изменяется на newSize.
Подклассы QAbstractTextDocumentLayout должны испускать этот сигнал, когда изменяется общий размер макета документа. Этот сигнал полезен для виджетов, отображающих текстовые документы, так как позволяет им правильно обновлять полосы прокрутки.
См. также documentSize().
Изменение количества страницvoid QAbstractTextDocumentLayout::pageCountChanged(int newPages)
Этот сигнал испускается, когда количество страниц в макете меняется; newPages — обновлённое количество страниц.
Подклассы QAbstractTextDocumentLayout должны испускать этот сигнал, когда количество страниц в макете изменилось. Изменения количества страниц вызываются изменениями макета или самим содержимым документа.
См. также pageCount().
Обновлениеvoid QAbstractTextDocumentLayout::update(const QRectF &rect = QRectF(0., 0., 1000000000., 1000000000.))
Этот сигнал испускается, когда прямоугольник rect был обновлён.
Подклассы QAbstractTextDocumentLayout должны испускать этот сигнал при изменении макета содержимого для перерисовки.
Обновление блокаvoid QAbstractTextDocumentLayout::updateBlock(const QTextBlock &block)
Этот сигнал испускается, когда указанный block был обновлён.
Подклассы QAbstractTextDocumentLayout должны испускать этот сигнал, когда макет block изменился для перерисовки.
QString QAbstractTextDocumentLayout::anchorAt(const QPointF &position) const
Возвращает ссылку на якорь, соответствующий заданной позиции position, или пустую строку, если якоря в данной точке нет.
[pure virtual] QRectF QAbstractTextDocumentLayout::blockBoundingRect(const QTextBlock &block) const
Возвращает прямоугольник, ограничивающий блок block.
[since 5.14] QTextBlock QAbstractTextDocumentLayout::blockWithMarkerAt(const QPointF &pos) const
Возвращает блок (вероятно, элемент списка), у которого маркер находится в заданной позиции pos.
Эта функция была добавлена в Qt 5.14.
QTextDocument *QAbstractTextDocumentLayout::document() const
Возвращает текстовый документ, на котором выполняется работа с этим макетом.
[pure virtual protected] void QAbstractTextDocumentLayout::documentChanged(int position, int charsRemoved, int charsAdded)
Эта функция вызывается всякий раз, когда содержимое документа изменяется. Изменение происходит при вставке, удалении текста или их комбинации. Изменение задаётся параметрами position, charsRemoved и charsAdded, соответствующими начальной позиции символа изменения, количеству удалённых символов и количеству добавленных символов.
Например, при вставке текста "Привет" в пустой документ, charsRemoved будет 0, а charsAdded — 5 (длина строки).
Замена текста — это комбинация удаления и вставки. Например, если текст "Привет" заменяется на "Здравствуй", charsRemoved будет 5, а charsAdded — 10.
Для подклассов QAbstractTextDocumentLayout эта функция является центральной, где выполняется большая часть работы по расположению и позиционированию содержимого документа.
Например, в подклассе, который только упорядочивает блоки текста, реализация этой функции должна выполнять следующее:
- Определить список изменённых QTextBlock(ов) с использованием предоставленных параметров.
- Для каждого объекта QTextBlock нужно обработать соответствующий объект QTextLayout. Вы можете получить макет QTextBlock с помощью функции QTextBlock::layout(). Эта обработка должна учитывать размеры страницы документа.
- Если изменилось общее количество страниц, следует выпустить сигнал pageCountChanged().
- Если общий размер изменился, следует выпустить сигнал documentSizeChanged().
- Следует выпустить сигнал update(), чтобы запланировать перерисовку областей в макете, требующих перерисовки.
См. также QTextLayout.
[pure virtual] QSizeF QAbstractTextDocumentLayout::documentSize() const
Возвращает общий размер макета документа.
Эта информация может использоваться виджетами отображения для правильного обновления полос прокрутки.
См. также documentSizeChanged() и QTextDocument::pageSize.
[pure virtual] void QAbstractTextDocumentLayout::draw(QPainter *painter, const QAbstractTextDocumentLayout::PaintContext &context)
Отрисовывает макет с помощью заданного painter и context.
[virtual protected] void QAbstractTextDocumentLayout::drawInlineObject(QPainter *painter, const QRectF &rect, QTextInlineObject object, int posInDocument, const QTextFormat &format)
Эта функция вызывается для отрисовки встроенного объекта object с помощью заданного painter внутри прямоугольника rect, используя указанный текстовый format.
posInDocument указывает позицию объекта в документе.
Стандартная реализация вызывает drawObject() у обработчиков объектов. Эта функция вызывается только внутри Qt. Подклассы могут переопределить эту функцию для настройки отрисовки встроенных объектов.
См. также draw().
[protected] QTextCharFormat QAbstractTextDocumentLayout::format(int position)
Возвращает формат символа, применимый в данной позиции position.
[since 5.8] QTextFormat QAbstractTextDocumentLayout::formatAt(const QPointF &pos) const
Возвращает текстовый формат в данной позиции pos.
Эта функция была добавлена в Qt 5.8.
[pure virtual] QRectF QAbstractTextDocumentLayout::frameBoundingRect(QTextFrame *frame) const
Возвращает прямоугольник, ограничивающий фрейм frame.
QTextObjectInterface *QAbstractTextDocumentLayout::handlerForObject(int objectType) const
Возвращает обработчик для объектов заданного типа objectType.
[pure virtual] int QAbstractTextDocumentLayout::hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const
Возвращает позицию курсора для заданной точки point с указанной точностью accuracy. Возвращает -1, если не найдена валидная позиция курсора.
[since 5.8] QString QAbstractTextDocumentLayout::imageAt(const QPointF &pos) const
Возвращает путь к изображению в заданной позиции pos, или пустую строку, если в данной точке нет изображения.
Эта функция была добавлена в Qt 5.8.
[pure virtual] int QAbstractTextDocumentLayout::pageCount() const
Возвращает количество страниц в макете.
См. также pageCountChanged().
QPaintDevice *QAbstractTextDocumentLayout::paintDevice() const
Возвращает устройство отрисовки, используемое для рендеринга макета документа.
См. также setPaintDevice().
[virtual protected] void QAbstractTextDocumentLayout::positionInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format)
Располагает встроенный объект item, используя заданный текстовый format.
posInDocument указывает позицию объекта в документе.
Стандартная реализация ничего не делает. Эта функция вызывается только внутри Qt. Подклассы могут переопределить эту функцию для настройки расположения встроенных объектов.
См. также drawInlineObject().
void QAbstractTextDocumentLayout::registerHandler(int objectType, QObject *component)
Регистрирует заданный component как обработчик для элементов заданного типа objectType.
Примечание: registerHandler() нужно вызвать один раз для каждого типа объекта. Это означает, что для нескольких символов замены одного и того же типа объекта существует только один обработчик.
Макет текстового документа не получает component в собственность.
[virtual protected] void QAbstractTextDocumentLayout::resizeInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format)
Устанавливает размер встроенного объекта item, соответствующего текстовому format.
posInDocument указывает позицию объекта в документе.
Стандартная реализация изменяет размер item на размер, возвращаемый функцией intrinsicSize() обработчика объекта. Эта функция вызывается только внутри Qt. Подклассы могут переопределить эту функцию, чтобы настроить изменение размера встроенных объектов.
void QAbstractTextDocumentLayout::setPaintDevice(QPaintDevice *device)
Устанавливает устройство отрисовки для рендеринга макета документа на заданное device.
См. также paintDevice().
[since 5.2] void QAbstractTextDocumentLayout::unregisterHandler(int objectType, QObject *component = nullptr)
Отменяет регистрацию указанного компонента в качестве обработчика элементов заданного типа objectType, или любого обработчика, если компонент не указан.
Эта функция была добавлена в Qt 5.2.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qabstracttextdocumentlayout.html