回答
我不知道它會工作,所以我寫了一個快速測試應用(QT 5.0.1)和工作的,這裏是一塊吧:
void MainWindow::on_plainTextEdit_cursorPositionChanged()
{
QPlainTextEdit *edit = qobject_cast<QPlainTextEdit *>(sender());
Q_ASSERT(edit);
QTextCursor cursor = edit->textCursor();
cursor.movePosition(QTextCursor::StartOfLine);
int lines = 1;
while(cursor.positionInBlock()>0) {
cursor.movePosition(QTextCursor::Up);
lines++;
}
QTextBlock block = cursor.block().previous();
while(block.isValid()) {
lines += block.lineCount();
block = block.previous();
}
ui->label->setText(QString::number(lines));
}
真棒解決方案!我只是把它翻譯成Python,它的工作原理!我在TextEdit中填入一些'a'來猜測每一行的文本長度。這是非常討厭的。 – 2013-04-05 10:34:03
第一個while循環對我來說不起作用b/c它正在計算包裝線。下面會發布另一個解決方案 – Wingware 2013-11-01 16:28:46
@Wingware是它計算被包裝的行,因爲它有問題(請參閱問題中的註釋)。如果你不想計算包裝線,那麼只需計算塊(代碼更簡單)。 – 2013-11-02 21:44:16
QTextCursor
有很多有用的方法,如:
int QTextCursor::position() const
返回文檔中的光標的絕對位置。光標位於字符之間。
和
INT QTextCursor :: positionInBlock()const的
返回塊內的光標的相對位置。光標位於字符之間。
這相當於position() - block().position()
。
'position()'返回字符的長度。我需要一個可見的行號... – 2013-04-04 16:07:36
這裏是用Python類似的解決方案。它修復了我在上面評論中提到的問題。這是在QTextEdit
子類中的方法:
def getLineAtPosition(self, pos):
cursor = self.textCursor()
cursor.setPosition(pos)
cursor.movePosition(QTextCursor.StartOfLine)
lines = 0
lines_text = cursor.block().text().splitlines()
lines_pos = 0
for line_text in lines_text:
lines_pos += len(line_text) + 1
if lines_pos > cursor.position() - cursor.block().position():
break
lines += 1
block = cursor.block().previous()
while block.isValid():
lines += block.lineCount()
block = block.previous()
return lines
這顯示了物理線路,而不是顯然OP所需的包裝線(抱歉,我的困惑)。仍然可能有用,所以留在這裏。請注意,如果您設置了具有
生產線的HTML()w /文本,這將起作用。然而,顯然這種情況下只有一個區塊。 –
Wingware
2013-11-04 21:37:59
- 1. Greasemonkey調試,獲取實際行號
- 2. 如何獲取TextView的實際行數?
- 3. 從堆棧跟蹤行號獲取實際的jsp行號?
- 4. 獲取哪個進程/窗口實際上在C#中可見#
- 5. 如何獲得可見/在可見光中Highcharts
- 6. Urwid:使光標不可見
- 7. 如何獲得NGIT的實際標籤?
- 8. 如何獲取C#中TextBox中的光標的列號?
- 9. 獲取光標位置或光標所在行的行數TinyMCE
- 10. 如何獲取CloudKit的實際配額?
- 11. DOJO DataGrid - 如何獲取第一個可見行和最後一個可見行的索引(編號)
- 12. 如何獲取光標下的文本?
- 13. 如何獲取光標移動的值?
- 14. 光標實際上沒有更新表
- 15. 乳膠,TOC中沒有節號,但在實際節標題中可見
- 16. 如何獲取當前正在運行的實際窗口的標題?
- 17. 如何從ComponentResourceKey獲取實際資源?
- 18. 如何將DataGridView行作爲位圖獲取光標圖標?
- 19. 獲取實際的形式
- 20. Oracle - 如何獲取特定行的實際大小?
- 21. 如何獲取此查詢中的實際運行餘額
- 22. 如何在渲染前獲取網格行的實際高度
- 23. 如何獲取jCarouselLite中的可見項?
- 24. org.openqa.selenium.ElementNotVisibleException當元素實際上可見
- 25. 如何從光標對象獲取URL
- 26. 如何從光標獲取類型?
- 27. 如何獲取可見地圖範圍的座標(lat/lon)?
- 28. 如何獲取gtk#中TextView中光標下的文本行?
- 29. 如何獲取行懸停以顯示適當的光標
- 30. android editText是否可見光標?
扭曲線通常被視爲一條線,我所有的編輯器的工作原理類似:Notpad ++,VI,...。 – 2013-04-04 15:50:02
當然,我使用Vim。但我需要在「TextEdit」的「實際」行下彈出一個窗口,所以我必須這樣做...... – 2013-04-04 16:06:08