Russian Qt Forum
Ноябрь 25, 2024, 08:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Есть одна проблемма с QTextEdit  (Прочитано 4106 раз)
Hort
Гость
« : Июль 31, 2008, 12:27 »

Вобщем суть проблемы такова:
вставляю в QTextEdit через ->textCursor().insertHtml() тэг с рисунком (<img src="...">), который в свою очередь помещается в тег ссылки (<a href="...">...</a>). если курсор установлен вплотную к картинке и чтото начать набирать - текст получается тоже с форматированием ссылки, а нужно чтобы ссылка была намертво прикрепленна к рисунку и за его пределы не выходила.
как можно от этого избавится?
Внизу пример картинки
Записан
EhTemka
Гость
« Ответ #1 : Июль 31, 2008, 16:15 »

Я тоже с этим сталкивался. НИ чего на ум не пришло кроме как вставлять после вставленого хтмл "\n"

Выглядит это так :

               
Код:
QTextCursor cursor = textCursor();		
QTextCharFormat formatTemp = currentCharFormat();
cursor.insertHtml(source->html());
cursor.insertText(" \n", formatTemp);
cursor.setCharFormat(formatTemp);
setTextCursor(cursor);
Записан
Hort
Гость
« Ответ #2 : Июль 31, 2008, 17:52 »

частично решил проблемму.
QTextEdit у меня уже был унаследован, так что я его просто немного дополнил.
Это я добавил в конструктор:
Код:
connect(this, SIGNAL(currentCharFormatChanged(const QTextCharFormat&)), this, SLOT(slotIsAnchor(const QTextCharFormat&)));

а это сам слот:
Код:
void TextEdit::slotIsAnchor(const QTextCharFormat& format)
{
if(format.isAnchor()){
QTextCharFormat changedFormat=format;
changedFormat.setAnchor(false);
setCurrentCharFormat(changedFormat);
}
}

теперь соседний текст ссылкой не становится, но внешний вид ссылки всеже остался (синий шрифт и подчеркивание). Может ктонибуть подскажет как от этого избавится? может поможет QTextDocument::setDefaultStyleSheet(), только что туда писать чтобы ссылка была без всякого форматирования?
Записан
Hort
Гость
« Ответ #3 : Август 01, 2008, 12:20 »

немного доработал код теперь все работает ок.
Код:
document()->setDefaultStyleSheet(QString("a { text-decoration: none; color: %1; }").arg(QApplication::palette().text().color().name()));
connect(this, SIGNAL(currentCharFormatChanged(const QTextCharFormat&)), this, SLOT(slotIsAnchor(const QTextCharFormat&)));

слот тоже немного доработал:
Код:
void TextEdit::slotIsAnchor(const QTextCharFormat& format)
{
if(format.isAnchor() && !textCursor().hasSelection()){
QTextCharFormat changedFormat=format;
changedFormat.setAnchor(false);
setCurrentCharFormat(changedFormat);
}
}
"&& !textCursor().hasSelection()" добавил в проверку, чтобы не было неприятного бага - если выделить текст в котором присутсвуют ссылки - то все теги-ссылки сразу удаляются (в некоторых случаях даже удалялся текст и изображения помещенные внутрь ссылок)

Этот пример подходит, если не нужны явные текстовые ссылки. если все же форматирование ссылок нужно оставить, то можно в слот добавить также что-то наподобии
Код:
changedFormat.setFontUnderline(false);
changedFormat.setForeground(QColor(Qt::black));
« Последнее редактирование: Август 02, 2008, 01:07 от Hort » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 21.