Qt 計(jì)算QTextEdit 行位置 實(shí)例
Qt 計(jì)算QTextEdit 行位置 實(shí)例是本文介紹的內(nèi)容,先來(lái)看內(nèi)容。筆者以前撰寫(xiě)過(guò)一篇關(guān)于QPlainTextEdit計(jì)算和繪制行號(hào)的文章, 里面詳細(xì)講述了遍歷QPlainTextEdit的每一行及其位置的方法。 最近遇到一個(gè)問(wèn)題是要為QTextEdit實(shí)現(xiàn)相同的功能。經(jīng)過(guò)實(shí)踐發(fā)現(xiàn),原理相同但使用的函數(shù)略有不同,特此memo,希望對(duì)廣大qter有用。
如果沒(méi)有閱讀過(guò)筆者前文的, 請(qǐng)自行復(fù)習(xí): 計(jì)算和繪制QPlainTextEdit的行號(hào)
針對(duì)QTextEdit的代碼版本列舉如下:
- QPainter painter(w);
- QTextBlock block = document()->begin();
- int top = 0;
- QTextCursor cursor(block);
- cursor.setPosition(0);//move to the beginning of the document
- int linenum = 0;
- while(linenum < document()->lineCount())
- {
- for( int i = 0 ; i < block.lineCount(); i ++) { color += 50; color %= 255; QColor pc(color,color,color);
- QTextLine line = block.layout()->lineAt(i);
- painter.fillRect( block.layout()->position().x(), block.layout()->position().y(), line.width(), line.height(), pc);
- qWarning() << linenum << block.layout()->position() << color;
- linenum ++;
- }
- blockblock = block.next();
- if(!block.isValid())
- {
- break;
- }
- }
其實(shí)比較兩者, 其相似程度達(dá)到95%以上。 只有一點(diǎn)需要提示注意, 那就是QTextLine的位置信息(x、y,rect等)是相對(duì)于當(dāng)前QTextBlock而言, 所以需要按照block的位置信息相應(yīng)位移才是正確的值。
這篇blog比較簡(jiǎn)單,僅做memo用。
小結(jié):Qt 計(jì)算QTextEdit 行位置 實(shí)例的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!