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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: TextEdit и замена в тексте  (Прочитано 8908 раз)
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 )

Нет замены регулярным выражениям.
Записан
crocus
Гость
« Ответ #1 : Май 21, 2006, 08:38 »

Как же все-таки искать управляющие символы (\t, \n\r) в textedit???
Записан
Steven_Orko
Гость
« Ответ #2 : Май 22, 2006, 00:02 »

А это, нельзя написать так:

Код:

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


Не ищет? Я сам не пробывал...
Записан
crocus
Гость
« Ответ #3 : Май 22, 2006, 01:13 »

В  том и прикол что ищет только "\t"  и то коряво, например:
в тексте "табуляцияпятьцифртабуляциятекст.,"  при поиске- замене удаляется все до точки, а еще лишние пробелы нужно удалить и  висячие стоки ("\r\n\r\n"). Символ"-",  при поиске "-" находит, непонятно что -типа неразрывного пробела или двойной пробел, короче основные непонятки что "курсор-текстдокумент в текстедите" считается управляющим символом и как искать последовательность например"\t 5\d \t \w .".
Записан
Dair
Гость
« Ответ #4 : Май 22, 2006, 10:57 »

Цитата: "crocus"

Код:

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


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


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

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

сработает?
Записан
crocus
Гость
« Ответ #5 : Май 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 )
как- то не сильно помогает Непонимающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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