Как добавить в QTextEdit без использования текущего стиля абзаца - PullRequest
1 голос
/ 17 июня 2020

При использовании myQTextEdit.append () стиль вставленного текста будет следующим (документация Qt 5.14):

" Новый добавленный абзац будет иметь тот же символ формат и формат блока в качестве текущего абзаца, определяемый позицией курсора."

Однако мне было бы удобно иметь возможность добавлять текст в стиле нейтральный .

Причина моей проблемы заключается в следующем: у меня есть окно журнала в форме QTextEdit, куда я добавляю текст (в основном нейтральный, но некоторые элементы могут быть окрашены, et c.). Поскольку это для целей журнала, QTextEdit доступен только для чтения, и текстовые элементы всегда добавляются в конце ( append () ). Это нормально, если пользователь никогда не нажимает на текст. При щелчке по части QTextEdit позиция курсора изменяется. Это не проблема для позиции, поскольку я использую append (), который вставляет текст в конец, даже если курсор находится в другом месте. Однако, если пользователь щелкнет что-то с ненейтральным стилем, добавленный впоследствии текст также будет иметь этот стиль, что нежелательно.

Что было бы интересно для меня, так это либо заблокировать курсор так что пользователь не может вмешиваться в стили или добавлять, не основывая стиль на текущем абзаце.

Есть ли способ изменить это поведение, кроме подкласса QTextEdit?

Как уже упоминалось, я мог бы проверить позицию курсора перед выполнением любого append () (и установить курсор в конце документа, если он был перемещен), но если он существует, я бы предпочел более "глобальное" решение.

1 Ответ

1 голос
/ 17 июня 2020

Я попытался воспроизвести в MCVE то, что описал OP:

// Qt header:
#include <QtWidgets>

// main application
int main(int argc, char **argv)
{
  qDebug() << "Qt Version:" << QT_VERSION_STR;
  QApplication app(argc, argv);
  // setup GUI
  QTextEdit qTextEdit;
  qTextEdit.show();
  // populate text editor
  qTextEdit.append(QString::fromUtf8(
    "<p>This is some text...</p>"
    "<p style='color: red'>...followed by more red text...</p>"
    "<p style='color: blue; font-weight: bold'>...followed by more fat blue text.</p>"));
  // test QTextEdit::append() like described by OP:
  qTextEdit.setTextCursor(QTextCursor(qTextEdit.document()->findBlockByNumber(1)));
  qTextEdit.append("TEST. (Reproduce what OP described.)");
  qTextEdit.append("<p>TEST. (A possible fix.)</p>");
  // runtime loop
  return app.exec();
}

Вывод:

snapshot of MCVE

Итак, возможное исправление - предоставить текст для добавления с разметкой.

Если это просто необработанный текст, самое простое решение - заключить его в "<p>" и "</p>".

Между прочим. если это просто необработанный текст, я бы порекомендовал некоторые дополнительные настройки, чтобы сделать его правильным HTML в соответствии с Поддерживается HTML Подмножество . А именно, я буду искать и заменять обычные метасимволы XML, как я это сделал, например, в моем ответе на SO: qt plaintextedit изменить цвет сообщения .

...