LINUX.ORG.RU

Перестало работать форматирование текста в QTextEdit. Что ему еще надо?

 , , , ,


0

1

У меня есть класс EditorTextArea, унаследованный от QTextEdit

В нем есть метод, который вызывается при смене гарнитуры шрифта в QFontComboBox:

void EditorTextArea::onChangeFontFamily(QString fontFamily)
{
  qDebug() << "Apply font family " << fontFamily;

  // Ранее для установки шрифта хватало одной команды setFontFamily(fontFamily);
  // Теперь так не работает, весь новый код ниже сделан на основе Qt примера Text Edit
  // Но и новый вариант тоже не работает

  QTextCharFormat format;
  format.setFontFamily(fontFamily);

  // Если нет выделения, дополнительным курсором выделяется слово, на котором стоит курсор
  QTextCursor cursor = this->textCursor();
  if (!cursor.hasSelection())
  {
      cursor.select(QTextCursor::WordUnderCursor);
  }

  cursor.mergeCharFormat(format);
  this->mergeCurrentCharFormat(format);
}

Проблема в том, что при срабатывании этого кода на экране ничего не меняется. Новый шрифт не применяется.

Но если подвигать курсором, и посмотреть на виджет выбора шрифта (который отображает текущий шрифт под курсором), можно заметить, что шрифт для выделенного текста установился. Как минимум, в структуре документа место, где был изменен шрифт, помечено, что оно имеет новый установленный шрифт. И при этом начертание текста не меняется!

Однако, если посмотреть на сгенерированный HTML-код такого документа (в примере есть кнопка с паутинкой), то будет видно, что нового шрифта в нем не будет, везде будет упоминаться сплошной Sans Serif.

Это дело происходит на Qt 5.13.1.

Еще наблюдение: стандартный пример Text Edit работает нормально. Тот же самый код приводит к форматированию, новое начертание сразу становится видно.

В общем, не знаю как заставить работать выбор шрифта.


Проект: https://github.com/xintrea/mytetra_dev
Файл: ./app/src/libraries/wyedit/EditorTextArea.cpp

★★★★★

Это регрессия в Qt

В общем, похоже на регрессию в Qt.

Я доработал код, чтобы компиляция шла на более старых версиях Qt (там в нескольких не связанных с редактором местах нужно было сделать вызов устаревших функций).

Так вот, в Qt 5.9.6 установка форматирования текста работает.

А в Qt 5.13.1 - нет.

Теперь сижу и думаю, что блин дальше делать. Учитывая, сколько времени из-за вот таких траблов за все эти годы у меня отобрал WYSIWIG-редактор на базе класса QTextEdit, я уже однозначно решил добавлять режим Markdown, а этот WyEdit поддерживать по остаточному принципу.

С другой стороны, в новом релизе нужно доработать этот WYSIWIG-редактор хоть до какого-то юзабельного состояния.

Поэтому надо каким-то волшебным образом заставить работать выбор шрифта в современном Qt, или хотя бы найти максимальную версию Qt, в которой эта функция еще не разломана.

Поэтому я прошу тех, у кого установлена версия Qt от 5.9.6 до 5.13.1, попробовать скомпилировать последнюю актуальную версию проекта (ветка experimental), и сообщить сюда, работает ли выбор шрифта, применяется ли выбранный шрифт.

Xintrea ★★★★★ ()
Ответ на: комментарий от bhfq

Оу, благодарю, значит вплоть до 5.12.4 форматирование текста работает.

Надо подождать, может еще кто отпишется по версии выше 5.13.1, возможно что в 5.14.x этой регрессии нет.

Xintrea ★★★★★ ()
Ответ на: комментарий от bhfq

Потратил время, скачал и установил Qt 5.12.6 и Qt 5.14.0.

Результат: в 5.12.6 - работает. В 5.14.0 - не работает.

Отсюда делаю вывод, что регрессия появилась в 5.13.0 - 5.13.1, и до сих пор не устранена. Странно, что она не проявляется в стандартном демопримере Qt Text Edit, но проявляется в моем редакторе, причем и там и там код аналогичный. Видимо, идет какая-то зависимость от настроек объекта QTextEdit, большего ничего на ум не приходит.

Xintrea ★★★★★ ()
Ответ на: комментарий от Xintrea

Можно же посмотреть прямо на сорцы https://github.com/qt/qtbase/ и сравнить нужные исходники, все сразу станет ясно.

Если в changelog нет ничего полезного.

https://github.com/qt/qtbase/blob/dev/dist/changes-5.13.0

https://github.com/qt/qtbase/blob/dev/dist/changes-5.13.1

https://github.com/qt/qtbase/blob/dev/dist/changes-5.13.2

bhfq ★★★★★ ()
Последнее исправление: bhfq (всего исправлений: 3)
Ответ на: комментарий от bhfq

Из всего набора изменений больше всего подходит:

- Text:
* [QTBUG-60813] Deprecated QFont::lastResortFamily() and
QFont::lastResortFont() which are not in use in Qt 5 and did not
provide any useful information.
* [QTBUG-22813] Added support for setting the font's style name in
QTextCharFormat.

Возможно, когда это делали, сделали несовместимость. Дальше надо подробней смотреть.

Xintrea ★★★★★ ()