我想映射QMap對象中的兩個指針以存儲它們的關係。鍵指針指向一個QTextBlock,而值指針指向一個小部件。目的是在QPlainTextEdit中的某些內容發生變化時更新小部件相對於QPlainTextEdit中QTextBlock位置的位置。當QTextBlock被破壞時,小部件應該被銷燬。在QPlainTextEdit中獲取指向QTextBlock的指針
但是,我不熟悉QPlainTextEdit中QTextBlock的行爲。雖然firstVisibleBlock()方法似乎沒有返回指向QPlainTextEdit中的QTextBlock的指針,但我用QPlainTextEdit中的QTextBlock作爲參數創建了一個新的QTextBlock。
QTextBlock* CodeEditor::getBlockAtPosition(QPoint position) {
QTextBlock block = firstVisibleBlock();
while (true)
{
QRectF blockDim = blockBoundingGeometry(block).translated(contentOffset());
if (position.y() <= blockDim.bottom() && position.y() >= blockDim.top())
{
break;
}
else if (block.blockNumber() + 1 < blockCount())
block = block.next();
else break;
}
return new QTextBlock (block);
}
那麼,這似乎工作,因爲當我通過按下回車鍵/返回背後指針改變對象的屬性,如預期增加新線(QTextBlocks)到QPlainTextEdit。這意味着如果你在相關塊之前插入一行,blockNumber會增加,幾何/位置也會改變。
但是,如果刪除相關行(backspace/del),指針仍指向QPlainTextEdit中的QTextBlock - 我不知道如何或爲什麼。當我在指針值上調用isValid()方法時,它返回true。
那麼,爲什麼屬性會改變它是一個新的QTextBlock對象?有沒有辦法獲得QPlainTextEdit中的QTextBlock的直接指針或引用?
你有沒有嘗試insertText()在「dangling」QTextBlock?你檢查了QTextBlock :: isVisible屬性嗎? – ibizaman