Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Разуев Максим от Мая 05, 2007, 15:56



Название: Проблема с якорями в QTextEdit
Отправлено: Разуев Максим от Мая 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-теги напрямую тоже не получается.


Название: Проблема с якорями в QTextEdit
Отправлено: alexis от Мая 08, 2007, 15:36
в qt anchor - тег без текста: <a name="anchor1" />
без патча исходников не обойтись


Название: Проблема с якорями в QTextEdit
Отправлено: Разуев Максим от Мая 08, 2007, 20:14
То что без текста понятно. Но почему тогда якорь не вставляется в нужную позицию(т.е. перед выделенным текстом.


Название: Проблема с якорями в QTextEdit
Отправлено: alexis от Мая 08, 2007, 21:54
а потомы что ты этого не говоришь сделать.
смотри в сторону cursor->selection() и т.д.


Название: Проблема с якорями в QTextEdit
Отправлено: Разуев Максим от Мая 08, 2007, 23:43
А setTextCursor(cursor) после изменения курсора. А selection врове возвращает выделенный фрагмент.
Курсор я получаю текущий (указывает на выделение). Его меняю и сохраню назад. Куда теряется позиция.


Название: Проблема с якорями в QTextEdit
Отправлено: alexis от Мая 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 );
}


Название: Проблема с якорями в QTextEdit
Отправлено: Разуев Максим от Мая 14, 2007, 21:51
Не работает. При повторной загрузке файла в TextEdit он преобразует якоря в свой формат


Название: Проблема с якорями в QTextEdit
Отправлено: alexis от Мая 15, 2007, 08:35
Я же говорю, что я пропатчил исходники библиотеки.
И парсер и форматы.
Если нужно - могу выложить патчик.