Russian Qt Forum
Июнь 16, 2024, 03:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с якорями в QTextEdit  (Прочитано 5209 раз)
Разуев Максим
Гость
« : Май 05, 2007, 15:56 »

Никак не могу нормально добавить якорь в QTextEdit.
Код вида:
Код:

 QTextCursor cursor=textCursor();
 QTextCharFormat format;
 QString AnchorName;
 AnchorName ="anchor1";
 format=cursor.charFormat();
 format.setAnchorName(AnchorName);
 format.setAnchor(true);
 cursor.mergeCharFormat(format);
 setTextCursor(cursor);

Якорь вставляется либо в начало документа в виде "<a name=anchor1></a>", либо вообще не вставляется.
Хотя должен вставлятся в виде "<a name=anchor1> выделенный текст </a>.
Может кто может спросить у Троллей(у кого есть лицензия).
Очень нужно. А то вставлять html-теги напрямую тоже не получается.
Записан
alexis
Гость
« Ответ #1 : Май 08, 2007, 15:36 »

в qt anchor - тег без текста: <a name="anchor1" />
без патча исходников не обойтись
Записан
Разуев Максим
Гость
« Ответ #2 : Май 08, 2007, 20:14 »

То что без текста понятно. Но почему тогда якорь не вставляется в нужную позицию(т.е. перед выделенным текстом.
Записан
alexis
Гость
« Ответ #3 : Май 08, 2007, 21:54 »

а потомы что ты этого не говоришь сделать.
смотри в сторону cursor->selection() и т.д.
Записан
Разуев Максим
Гость
« Ответ #4 : Май 08, 2007, 23:43 »

А setTextCursor(cursor) после изменения курсора. А selection врове возвращает выделенный фрагмент.
Курсор я получаю текущий (указывает на выделение). Его меняю и сохраню назад. Куда теряется позиция.
Записан
alexis
Гость
« Ответ #5 : Май 10, 2007, 11:29 »

Я пропатчил Qt на предмет доп. атирубтов для тегов img и a.
Вот так я вставляю ссылку:

Код:

QTextCursor cursor = htmlEdit->textCursor();
if ( !cursor.hasSelection() ) return;

// clear trolltech html representation
QString html = clearHtml( cursor.selection().toHtml() );

QStringList rlist;
rlist << "href=\"(.[^\"]+)\"";
rlist << "title=\"(.[^\"]+)\"";
rlist << "name=\"(.[^\"]+)\"";
rlist << "target=\"(.[^\"]+)\"";

// setting up anchor dialog
AnchorDialog aDialog( this );

// try to get anchor attributes on selection
QRegExp re;
for( int i = 0; i < rlist.size(); i++ )
{
    re.setPattern( rlist.at(i) );
    if ( re.indexIn(html) > -1 ) {
        switch ( i ) {
            case 0: aDialog.setUrl( re.cap( 1 ) ); break;
            case 1: aDialog.setTitle( re.cap( 1 ) ); break;
            case 2: aDialog.setAName( re.cap( 1 ) ); break;
            case 3: aDialog.setTarget( re.cap( 1 ) ); break;
        }
    }
}

if ( aDialog.exec() == QDialog::Accepted )
{
    QString anchor("<a");
    if ( !aDialog.getAName().isEmpty() )
        anchor += " name=\"" + aDialog.getAName() + "\"";
    else if ( !aDialog.getUrl().isEmpty() )
        anchor += " href=\"" + aDialog.getUrl() + "\"";

    if ( !aDialog.getTitle().isEmpty() )
        anchor += " title=\"" + aDialog.getTitle() + "\"";

    if ( !aDialog.getTarget().isEmpty() )
        anchor += " taget=\"" + aDialog.getTarget() + "\"";

    anchor += ">" + html + "</a>";
    cursor.removeSelectedText();
    cursor.insertHtml ( anchor );
}
Записан
Разуев Максим
Гость
« Ответ #6 : Май 14, 2007, 21:51 »

Не работает. При повторной загрузке файла в TextEdit он преобразует якоря в свой формат
Записан
alexis
Гость
« Ответ #7 : Май 15, 2007, 08:35 »

Я же говорю, что я пропатчил исходники библиотеки.
И парсер и форматы.
Если нужно - могу выложить патчик.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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