두 개의 포인터를 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);
}
음, 이것은 작동하는 것 같다 때문에 나는/입력 의도 한대로 포인터 변화 뒤에있는 객체의 속성을 반환 타격하여 QPlainTextEdit에 새로운 라인 (QTextBlocks)를 추가 할 때. 즉, 해당 블록 앞에 선을 삽입하면 blockNumber가 증가하고 지오메트리/위치가 변경됩니다.
그러나 관련 줄 (백 스페이스/델)을 삭제해도 포인터는 여전히 QPlainTextEdit의 QTextBlock을 가리 킵니다. 어떻게 또는 왜 그 이유가 없습니다. 포인터 값에 isValid() 메서드를 호출하면 true를 반환합니다.
그렇다면 새로운 QTextBlock 객체 인 이유는 무엇입니까? QPlainTextEdit에서 직접 포인터 또는 QTextBlock에 대한 참조를 가져 오는 방법이 있습니까?
"매달려있는"QTextBlock에 insertText()를 시도 했습니까? QTextBlock :: isVisible 속성을 확인 했습니까? – ibizaman