Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: crocus от Май 17, 2006, 03:23



Название: TextEdit и замена в тексте
Отправлено: crocus от Май 17, 2006, 03:23
На первый взгляд все просто
Код:

bool NewspaperWindow::searchNext()
{
    QTextDocument * document = textedit->document();
QTextCursor searchCursor, positionCursor = textedit->textCursor();
QTextDocument::FindFlags findFlags = 0;
//
searchCursor = textedit->document()->find(tr(" ") , positionCursor, findFlags);

if (!searchCursor.isNull())
{
QApplication::setActiveWindow(textedit);
textedit->setTextCursor(searchCursor);
return true;
}
//
return false;
}

bool NewspaperWindow::replaceNext()
{
// repalce text
if ( searchNext() )
{
//QTextCursor textCursor = document->find("^t");
QTextCursor textCursor = textedit->textCursor();
textCursor.beginEditBlock();
        textCursor.select(QTextCursor::BlockUnderCursor);
textCursor.removeSelectedText();
textCursor.insertText( "Замена" );
textedit->setTextCursor( textCursor );
        textCursor.endEditBlock();
    return true;
}
// no match found
return false;
}

Вопрос в том как заменять непечатные символы например лишние концы строк, символы табуляции и т.д.
Используя эти функции
Код:

QTextCursor QTextDocument::find ( const QString & expr, const QTextCursor & cursor, FindFlags options = 0 ) const

void QTextCursor::insertText ( const QString & text )

Нет замены регулярным выражениям.


Название: TextEdit и замена в тексте
Отправлено: crocus от Май 21, 2006, 08:38
Как же все-таки искать управляющие символы (\t, \n\r) в textedit???


Название: TextEdit и замена в тексте
Отправлено: Steven_Orko от Май 22, 2006, 00:02
А это, нельзя написать так:

Код:

QTextCursor textCursor = document->find("\t");


Не ищет? Я сам не пробывал...


Название: TextEdit и замена в тексте
Отправлено: crocus от Май 22, 2006, 01:13
В  том и прикол что ищет только "\t"  и то коряво, например:
в тексте "табуляцияпятьцифртабуляциятекст.,"  при поиске- замене удаляется все до точки, а еще лишние пробелы нужно удалить и  висячие стоки ("\r\n\r\n"). Символ"-",  при поиске "-" находит, непонятно что -типа неразрывного пробела или двойной пробел, короче основные непонятки что "курсор-текстдокумент в текстедите" считается управляющим символом и как искать последовательность например"\t 5\d \t \w .".


Название: Re: TextEdit и замена в тексте
Отправлено: Dair от Май 22, 2006, 10:57
Цитата: "crocus"

Код:

    QTextDocument * document = textedit->document();
QTextCursor searchCursor, positionCursor = textedit->textCursor();


Нет замены регулярным выражениям.


Есть мысль искать по QString используя QRegExp. QString брать из QDocumentBlock'а.

Замену делать уже при помощи QDocumentCursor, конечно.

сработает?


Название: TextEdit и замена в тексте
Отправлено: crocus от Май 25, 2006, 14:35
Возможно не слишком элегантно, но работет:
Код:

QString textrep = textedit->toPlainText();
textrep.replace( QRegExp( "[\\t]{2}[\\d]{6,}[\\t]{2}" ), "замена" );
textrep.replace( QRegExp( "[\\t]{2,}" ), "замена" );
textrep.replace( QRegExp( "[\\s][\bТ\b][\\.]" ), "\t" );
textrep.replace( QRegExp( "[\\-]" ), "" );
textrep.replace( "НЕДВИЖИМОСТЬ / ПРОДАЮ / 2комн. кв. / Все" , "замена" );
textrep.replace( "Столет.,", "Столетия\t" );
textedit->setPlainText(textrep);


добавлено спустя 6 минут:

 Ну и в продолжение темы -преобразованный текст (разделитель табуляция) необходимо загнать в таблицу
Код:

QTextTable * QTextCursor::insertTable ( int rows, int columns, const QTextTableFormat & format )
как- то не сильно помогает ???