QString UTextEdit::makeCaseSensitiveUpper(QString InputString){ return InputString.toUpper();}QString UTextEdit::makeCaseSensitiveLower(QString InputString){ return InputString.toLower();}QString UTextEdit::makeCaseSensitiveNegative(QString InputString){ for (int i = 0; i < InputString.size(); i++) { if(InputString[i].isLower()) InputString[i] = InputString[i].toUpper(); else InputString[i] = InputString[i].toLower(); } return InputString;}
enum UTypesOfCaseSensitive{ UpperCaseSensitive, LowerCaseSensitive, NegativeCaseSensitive};void UTextEdit::textCaseSensitiveEdit(UTypesOfCaseSensitive typeOfCaseSensitive){ QTextCursor cursor = this->textCursor(); if(!cursor.selectedText().isEmpty()) { cursor.beginEditBlock(); if(typeOfCaseSensitive == UpperCaseSensitive) { QTextDocumentFragment textFragment = cursor.selection(); QString text = textFragment.toPlainText(); QString changeText = makeCaseSensitiveUpper(text); this->setText(this->toPlainText().replace(QString(text), QString(changeText)); }else if(typeOfCaseSensitive == LowerCaseSensitive) { QTextDocumentFragment textFragment = cursor.selection(); QString text = textFragment.toPlainText(); QString changeText = makeCaseSensitiveLower(text); this->setText(this->toHtml().replace(QString(text), QString(changeText)); }else if(typeOfCaseSensitive == NegativeCaseSensitive) { QTextDocumentFragment textFragment = cursor.selection(); QString text = textFragment.toPlainText(); QString changeText = makeCaseSensitiveNegative(text); this->setText(this->toHtml().replace(QString(text), QString(changeText)); } cursor.endEditBlock(); }}
this->setText(this->toHtml().replace(QString(text), QString(changeText));
this->setText(this->toPlainText().replace(QString(text), QString(changeText));
QTextDocumentFragment textFragment = cursor.selection(); QString text = textFragment.toPlainText(); QString changeText = makeCaseSensitiveNegative(text); this->setText(this->toHtml().replace(cursor.position(), text.size(), changeText);
QTextDocumentFragment textFragment = cursor.selection();QString text = textFragment.toPlainText();
this->setText(this->toPlainText().replace(QString(text),QString(changeText));
QString text = cursor.selectedText(); QString changeText = makeCaseSensitiveUpper(text); cursor.insertText(changeText);
QString text = cursor.selectedText(); QString changeText = makeCaseSensitiveUpper(text); for(int i = 0; i < changeText.size(); i++) cursor.insertText(changeText.data()[i]);
QTextCharFormat charFormat; charFormat.setForeground(Qt::yellow); cursor.insertText(changeText.data()[0], charFormat);
QTextCursor cursor = this->textCursor();int start = cursor.selectionStart();int end = cursor.selectionEnd();int cStart = 0;int cEnd = 0;QTextBlock block = document()->findBlock(start);while (true) { if (!block.isValid()) {break;} if (block.position() > end) {break;} QTextBlock::iterator it; for(it = block.begin(); !(it.atEnd()); ++it) { QTextFragment currentFragment = it.fragment(); if (!currentFragment.isValid()) {continue;} int fs = currentFragment.position(); int fe = currentFragment.position() + currentFragment.length(); if (end < fs || start > fe) {continue;} QTextCursor temp(document()); if (start < fs) { cStart = fs; } else { cStart = start; } if (end < fe) { cEnd = end; } else { cEnd = fe; } temp.setPosition(cStart); temp.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, cEnd - cStart); QString text = temp.selectedText(); text = text.toUpper(); temp.beginEditBlock(); temp.insertText(text); temp.endEditBlock(); } block = block.next();}
QTextCursor cursor = this->textCursor();int start = cursor.selectionStart(); int end = cursor.selectionEnd(); int cStart = 0;int cEnd = 0;// получем текстовый блок используя позицию курсораQTextBlock block = document()->findBlock(start);while (true) { if (!block.isValid()) {break;} // если блок не существует if (block.position() > end) {break;} // если позиция первого символа в блоке > end (а это может быть??) QTextBlock::iterator it;// перебираем символы блока с начала до конца for(it = block.begin(); !(it.atEnd()); ++it) {// текстовый фрагмент - это ведь слова, символы, отделенные друг от друга разделителем (пробел например)? QTextFragment currentFragment = it.fragment(); if (!currentFragment.isValid()) {continue;} // если не существует int fs = currentFragment.position(); // нач позиция int fe = currentFragment.position() + currentFragment.length(); // конечная if (end < fs || start > fe) {continue;} // еще одна проверка QTextCursor temp(document()); // а почему получаем именно от документа курсор, а не от text edit? // определяем нач и кон позицию // передвижения курсора по документу if (start < fs) { cStart = fs; } else { cStart = start; } if (end < fe) { cEnd = end; } else { cEnd = fe; } // курсор будет находиться в позиции cStart temp.setPosition(cStart); // сдвигаем вправо, выделяя пройденные символы temp.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, cEnd - cStart); QString text = temp.selectedText(); text = text.toUpper(); //помещаем вставку в этот блок, чтобы можно было использовать после //undo и redo temp.beginEditBlock(); temp.insertText(text); temp.endEditBlock(); } // смотрим следующий блок block = block.next();}
void UTextEdit::textCaseSensitiveEdit(UTypesOfCaseSensitive typeOfCaseSensitive){ QTextCursor cursor = this->textCursor(); int startPosition = cursor.selectionStart(); int endPosition = cursor.selectionEnd(); int cursorStart = 0; int cursorEnd = 0; QTextBlock block = document()->findBlock(startPosition); while(true) { if(!block.isValid()) break; if(block.position() > endPosition) break; QTextBlock::iterator it; for(it = block.begin(); !(it.atEnd()); ++it) { QTextFragment currentFragment = it.fragment(); if (!currentFragment.isValid()) continue; int fragmentLength = currentFragment.length(); int fragmentStart = currentFragment.position(); int fragmentEnd = fragmentStart + fragmentLength; if (endPosition < fragmentStart || startPosition > fragmentEnd) continue; QTextCursor temp(document()); if(startPosition < fragmentStart) cursorStart = fragmentStart; else cursorStart = startPosition; if(endPosition < fragmentEnd) cursorEnd = endPosition; else cursorEnd = fragmentEnd; temp.setPosition(cursorStart); temp.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, cursorEnd - cursorStart); QString text = temp.selectedText(); if(typeOfCaseSensitive == UpperCaseSensitive) { text = makeCaseSensitiveUpper(text); }else if(typeOfCaseSensitive == LowerCaseSensitive) { text = makeCaseSensitiveLower(text); }else if(typeOfCaseSensitive == NegativeCaseSensitive) { text = makeCaseSensitiveNegative(text); } temp.beginEditBlock(); temp.insertText(text); temp.endEditBlock(); } block = block.next(); }}