Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: xintrea от Декабрь 31, 2019, 09:19



Название: Перестало работать форматирование текста в QTextEdit. Что ему еще надо?
Отправлено: xintrea от Декабрь 31, 2019, 09:19
У меня есть класс 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


Название: Re: Перестало работать форматирование текста в QTextEdit. Что ему еще надо?
Отправлено: xintrea от Январь 02, 2020, 11:17
В общем, это похоже на регрессию в Qt.

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

А в Qt 5.13.1 - нет.

Если у кого стоит Qt версии 5.12.4 и выше (вплоть до 5.14.x), прошу скомпилить проект и сказать, работает ли выбор шрифта, применяется ли выбранный шрифт.


Название: Re: Перестало работать форматирование текста в QTextEdit. Что ему еще надо?
Отправлено: kambala от Январь 03, 2020, 21:58
под Макос не собирается стандартными qmake && make -j4:
Код:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include/string.h:160:7: error:
      conflicting types for 'strcasestr'
char    *strcasestr(const char *__big, const char *__little);
         ^
../../../mytetra_dev-experimental/thirdParty/mimetex/mimetex.c:428:13: note: previous declaration is here
const char *strcasestr(const char *s1, const char *s2);