LINUX.ORG.RU

Вставка ссылки в QTextEdit

 ,


0

2

Имеется объект textArea - представитель класса QTextEdit.

Я пытаюсь сделать из выделенного фрагмента HTML-ссылку (URL ссылки в переменной refereceUrl):

  // Устанавливается текст ссылки
  QTextCharFormat charFormat;
  charFormat.setAnchorHref(refereceUrl);

  // Если текст ссылки задан
  if(refereceUrl.length()>0)
  {
    charFormat.setAnchor(true);
    textArea->textCursor().mergeCharFormat(charFormat);
  }
  else
  {
    // Иначе текст ссылки пустой и ссылку надо убрать
    charFormat.setAnchor(false);
    textArea->textCursor().setCharFormat(charFormat);
  }


Ссылка устанавливается, но визуально текст не меняется (выделенный фрагмент не становится синим с подчеркиванием).

Единственный способ увидеть созданную ссылку - это взять текст textArea.html и снова его установить через textArea.setHtml(html). Но это я считаю слишком дорогостоящим решением.

Самое интересное, что убирание ссылки работает правильно (т. е. если устанавливаемая ссылка пустая, то синий цвет и подчеркивание убираются). А именно установка ссылки визуально работает криво - не появляется синего цвета и подчеркивания.

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

★★★★★

Последнее исправление: Xintrea (всего исправлений: 1)
Ответ на: комментарий от CrossFire

Да вот гугол наконец сказал, что проблеме уже пять (пять, Карл!) лет. Описание один в один:

http://www.forum.crossplatform.ru/index.php?showtopic=4670&mode=linearplus

На буржуйском ничего найти не могу, уже добавлял «bug», но лезет только документация и какие-то левые обсуждения. Такое впечатление, что буржуи не знают об этом баге. Но это вряд ли. Значит, мы чего-то не понимаем в описании:

void QTextCharFormat::setAnchor(bool anchor)
If anchor is true, text with this format represents an
anchor, and is formatted in the appropriate way; otherwise
the text is formatted normally. (Anchors are hyperlinks which
are often shown underlined and in a different color from
plain text.)

The way the text is rendered is independent of whether or not
the format has a valid anchor defined. Use setAnchorHref(),
and optionally setAnchorNames() to create a hypertext
link.

Когда гугл молчит — полезно задавать вопросы на официальном форуме.

Мая англиска не знае, писати неабучена. Ферштейн, штангенциркуль?

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

В общем, я так понял, нужно делать подсветку руками, и это норма, что они не синеют. Вот тут подробнее: https://github.com/mipt-ilab/mipt-vis/issues/55

charFormat.setForeground(QApplication::palette().color(QPalette::Link));
charFormat.setFontUnderline(true);
CrossFire ★★★★★
()
Ответ на: комментарий от CrossFire

Эмм, а убирание работает для чего? Как получается, что они синели?

Если я сохраню редактируемый текст и открою его вновь, то ссылка посинеет. Подробнее тут:

http://www.prog.org.ru/index.php?topic=29678.msg218015#msg218015

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

Проголосовал. Целый один голос.

Xintrea ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.