Russian Qt Forum

Qt => Общие вопросы => Тема начата: Hort от Июль 31, 2008, 12:27



Название: Есть одна проблемма с QTextEdit
Отправлено: Hort от Июль 31, 2008, 12:27
Вобщем суть проблемы такова:
вставляю в QTextEdit через ->textCursor().insertHtml() тэг с рисунком (<img src="...">), который в свою очередь помещается в тег ссылки (<a href="...">...</a>). если курсор установлен вплотную к картинке и чтото начать набирать - текст получается тоже с форматированием ссылки, а нужно чтобы ссылка была намертво прикрепленна к рисунку и за его пределы не выходила.
как можно от этого избавится?
Внизу пример картинки


Название: Re: Есть одна проблемма с QTextEdit
Отправлено: EhTemka от Июль 31, 2008, 16:15
Я тоже с этим сталкивался. НИ чего на ум не пришло кроме как вставлять после вставленого хтмл "\n"

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

               
Код:
QTextCursor cursor = textCursor();		
QTextCharFormat formatTemp = currentCharFormat();
cursor.insertHtml(source->html());
cursor.insertText(" \n", formatTemp);
cursor.setCharFormat(formatTemp);
setTextCursor(cursor);


Название: Re: Есть одна проблемма с QTextEdit
Отправлено: Hort от Июль 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(), только что туда писать чтобы ссылка была без всякого форматирования?


Название: Re: Есть одна проблемма с QTextEdit
Отправлено: Hort от Август 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));