Класс QTextObjectInterface
Класс QTextObjectInterface позволяет отображать пользовательские текстовые объекты в QTextDocument. Подробнее...
| Заголовок: | #include <QTextObjectInterface> |
| qmake: | QT += gui |
| С момента: | Qt 4.5 |
Открытые функции
| virtual | ~QTextObjectInterface() |
| virtual void | drawObject(QPainter *painter, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format) = 0 |
| virtual QSizeF | intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format) = 0 |
Подробное описание
Класс QTextObjectInterface позволяет отображать пользовательские текстовые объекты в QTextDocument.
Текстовый объект описывает структуру одного или нескольких элементов в текстовом документе; например, изображения, импортированные из HTML, реализуются с помощью текстовых объектов. Текстовый объект знает, как выкладывать и отображать свои элементы при отрисовке документа.
Qt позволяет вставлять пользовательские текстовые объекты в документ, регистрируя пользовательский тип объекта с помощью QTextCharFormat. Для этого типа также необходимо реализовать QTextObjectInterface и зарегистрировать его с QAbstractTextDocumentLayout документа. При обнаружении типа объекта при отрисовке QTextDocument вызываются функции intrinsicSize() и drawObject() интерфейса.
Следующий список поясняет необходимые шаги для вставки пользовательского текстового объекта в документ:
- Выберите objectType. objectType — целое число со значением, большим или равным QTextFormat::UserObject.
- Создайте объект QTextCharFormat и установите тип объекта на выбранный тип с помощью функции setObjectType().
- Реализуйте класс QTextObjectInterface.
- Вызовите QAbstractTextDocumentLayout::registerHandler() с экземпляром вашего подкласса QTextObjectInterface, чтобы зарегистрировать ваш тип объекта.
- Вставьте QChar::ObjectReplacementCharacter с указанным выше QTextCharFormat выбранного типа объекта в документ. Как упоминалось, функции QTextObjectInterface intrinsicSize() и drawObject() будут вызываться с QTextFormat в качестве параметра всякий раз, когда встречается символ замены.
Класс, реализующий текстовый объект, должен наследоваться как от QObject, так и от QTextObjectInterface. QObject должен быть первым наследовавшимся классом. Например:
class SvgTextObject : public QObject, public QTextObjectInterface
{
Q_OBJECT
Q_INTERFACES(QTextObjectInterface) Данные текстового объекта обычно хранятся в QTextCharFormat с помощью QTextCharFormat::setProperty(), а затем извлекаются с помощью QTextCharFormat::property().
Предупреждение: операции копирования и вставки игнорируют пользовательские текстовые объекты.
См. также Пример текстового объекта, QTextCharFormat и QTextLayout.
Документация по функциям-членам
[virtual] QTextObjectInterface::~QTextObjectInterface()
Удаляет этот QTextObjectInterface.
[pure virtual] void QTextObjectInterface::drawObject(QPainter *painter, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format)
Отображает этот текстовый объект с помощью указанного painter.
Размер прямоугольника rect, в котором необходимо отобразить, — это размер, ранее рассчитанный функцией intrinsicSize(). Положение прямоугольника относительно painter.
Вы также получаете документ (doc) и позицию (posInDocument) format в этом документе.
См. также intrinsicSize().
[pure virtual] QSizeF QTextObjectInterface::intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format)
Функция intrinsicSize() возвращает размер текстового объекта, представленного format в данном документе (doc) в данной позиции (posInDocument).
Рассчитанный размер будет использован для последующих вызовов drawObject() для этого format.
См. также drawObject().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qtextobjectinterface.html