У меня есть богатые текстовые элементы, реализованные с использованием QGraphicsTextItem
Чтение Rich Text Character и блок форматирования
Чтобы установить размер шрифта, например:
void set (int fontSize) {
QTextCursor _cursor = textCursor();
QTextCharFormat _format;
_format.setFontPointSize(fontSize);
_cursor.mergeCharFormat(_format);
setTextCursor(_cursor); }
намного сложнее, чтобы прочитать размер шрифта.
Предполагая, что у меня есть выбор, я должен перебрать документ, через все QTextBlock
, QTextFragment
, чтение QTextCharFormat
...
Но простой вариант, если нет выбора, просто читать размер шрифта под курсором:
int get() {
return textCursor().charFormat().fontPointSize(); }
Это работает, но я нашел 3 вопроса:
1) Настройка размера шрифта по QGraphicsTextItem
свойствами:
QFont f = font();
f.setPointSize(20);
setFont(f);
это возвращает 0 моей функцией get
выше. Чтобы установить размер шрифта для всего элемента, я должен использовать тот же метод, что и в функции set
.
Не должен ли метод setFont
установить шрифт, который можно прочитать с QTextCursor
?
2) setHtml
можно установить форматирование - но я не вижу какой-либо способ, чтобы прочитать, что при форматировании
Как я могу читать форматированный текст форматирования из фрагмента HTML? Является единственной позитивностью, анализируя html?
3) (мой текущий блок Камня)
Копировать форматированный текст из внешнего источника и вставить в QGraphicsTextItem
, кажется, сохранить форматирование источника - но как я могу прочитать, что при форматировании?
Метод get
выше читает размер шрифта 0, если текст был вставлен снаружи.
font().pointSize()
всегда возвращает 8. (Я не задал его, так что я думаю, что это значение по умолчанию)
Есть ли другой способ для чтения текстового формата?
- это текст буфера обмена, отформатированный с использованием html?
Как найти размер шрифта (или любого другого форматирования) из вложенного текста?
(Эти же вопросы относятся к форматированию блоков, например выравниванию).
Спасибо за пример, поэтому в основном это невозможно реализовать форматированный текст с взаимодействием с пользователем - с помощью позиции курсора, выбор и так далее - с каким-либо HTML или любым входным буфером обмена, то есть то, что я понимаю. Поскольку это то, что мне нужно сделать: реализовать расширенное редактирование текста, единственный способ отключить любое форматирование html и разрешить простое вложение текста. Это правда ? Или я понимаю ваш ответ неправильно? – Thalia
Мой код ... является гигантским ... но я вставил соответствующие функции, чтобы установить размер шрифта (в точке курсора, чтобы новый текст имел размер шрифта) или для выделенного фрагмента текста, а также чтобы получить шрифт в курсора. – Thalia
Ваш код отвечает на мой вопрос (2), а также подтверждает мое утверждение из (1) - за исключением того, что, как представляется, существует только способ получить все форматы во всем документе. Невозможно получить его в определенной точке (например, в позиции) или для определенного диапазона (выбор - от позиции a до позиции b). – Thalia