How to use QTextCursor to highlight a text
-
hello guys
my aim is to highlight some letters in a text. I made a class inheriting from QSyntexhighlighter but i don't know how to set the cursor. Currently i wait for calling updatefn from inside the highlightblock but this seems to time costing much computations and time. Could any body help me ?
@
void Highlighter::highlightBlock(const QString &text)
{
/*
int startIndex = 0;
if (previousBlockState() != 1)
startIndex = commentStartExpression.indexIn(text);
qDebug() << text << "block";
*/
//Blockcount
//QTextBlock block = new QTextBlock (this);
//int blockNumber = block.blockNumber();
if (!text.isEmpty())
{
//qDebug() << text << "linenumber=" << blockcounter;
updatefn(1);
blockcounter ++; //line counter
}
}void Highlighter::updatefn(int length) //mistakes
{
//update when the block number is the one given in the list
// last added correctionblock is
//qDebug() << "text block count" <<QTextCharFormat MyMistakeFormat; MyMistakeFormat.setFontWeight(QFont::Bold); MyMistakeFormat.setForeground(Mistake_color); MyMistakeFormat.setBackground(Mistake_color_background); int i; int mist_size; int conc_size; int corr_size; int max; mist_size=mistakes.size(); conc_size=concentrations.size(); corr_size=correct.size(); max=(mist_size>=conc_size ? mist_size : conc_size); // if mist>conc return mist else conc max=(corr_size>=max ? corr_size : max); // if corr>max return corr else max int a; for (i=1; i<=max; i++) { a=i-1; if (i<=mist_size ) { if (blockcounter==mistakesBlock[a]) //mistakesBlock.last()) { //qDebug() << "update - blocks = " << blockcounter << "correction last value=" << mistakesBlock.last(); setFormat(mistakes[a],length,MyMistakeFormat); setCurrentBlockState(0); } } } //QTextCursor cur(parent); //cur.setPosition(CurrentLine); //qDebug() << "cursor position" << cur.position() << "inblock" << cur.positionInBlock();
}
@ -
Why would you want to set the cursor inside the QSyntaxHighlighter? I suppose you'd want to do that on the QTextEdit that the highlighter was operating on, i.e.
@
QTextEdit* myTextEdit = new QTextEdit(parent);
Highlighter* myHighlighter = new Highlighter(myTextEdit); // this assigns the highligter to the text edit...
QTextCursor cursor = myTextEdit->textCursor();
cursor.setPosition(myPosition); // use desired position here
myTextEdit->ensureCursorVisible();@
Hope this helps.
Regards,
Rogier -
I want to set the cursor because I want to automatically change color of wrong letters.
So I found that to change a certain color of a letter, it must be selected by cursor.Am I right?
-
yes, after the user types, there is an error checking phase .. where the user does not write any thing .. like spelling mistakes function from microsoft winword .
But I don't know what is a block and how to set the position of a cursos. how to set myPosition in the code? -
So far as I used it, myPosition is just the index of the character in the total string. So if there is an error say 5 characters from the beginning of the string then I'd set myPosition to 4.
As for what a block is, I always get the entire text edit text in one highlightBlock() call so I never went into that.