QTextLine
по QTextLayout.createLine();
QTextLayout
можно сделать один QTextBlock
, то ENTER charackter или ключ создать новый QTextBlock. Поэтому вы должны нарисовать макет для каждого блока.
QTextBlock не содержит "\n"
характер, так как этот символ раскола текст нового QTextBlock
Я использует этот пример:
class KonuIcerik : public QGraphicsTextItem
{
public:
QRectF boundingRect() const
{
return QRectF(0 , 0 , this->LineWidth , this->height);
}
int height;
int LineWidth;
int LineCountMod;
int CallNumber;
QString metin;
QFont font;
QTextEdit* textEdit;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget)
{
int y = 0 ;
CallNumber = 0;
int PageNumber = 1;
for(int i = 0 ; i < textEdit->document()->blockCount() ; i++){
QTextBlock block = textEdit->document()->findBlockByNumber(i);
QTextLayout layout(block);
layout.setFont(font);
layout.beginLayout();
while(true){
QTextLine line = layout.createLine();
if(!line.isValid()){
break;
}else{
if(CallNumber > 37 && (CallNumber-37) % LineCountMod == 0){
y += 300;
PageNumber++;
}
CallNumber++;
if(CallNumber == 37){
y += 300;
PageNumber++;
}
line.setLineWidth(LineWidth);
line.setPosition(QPointF(0 , y));
y += line.height();
}
}
this->height = y;
layout.endLayout();
layout.draw(painter,QPointF(0,0));
}
}
void UPdate(){
update(-50,-50 , LineWidth+50 , height+50);
}
};
вы ссылаетесь этот класс, и вы видите новую строку, если «\ n "содержит. Надеюсь, это поможет.
[Здесь] (https://doc.qt.io/archives/qq/qq24-textlayouts.html) у вас есть хороший пример. – Tarod
@Tarod в примере, который вы указали, используется 'setLineWidth', который задает длину строки в пикселях, тогда как мне нужно разбить определенные точки в тексте. – piotrekg2