2017-10-31 2 views
0

각 줄을 QTextEdit에 표시되는 방법으로 가져올 수 있습니까?QTextEdit의 줄 바꿈 가져 오기

bla bla bla bla bla bla bla bla bla 
bla bla bla bla 

가 지금은 각 라인 등을 얻으려면 텍스트 편집기에서 2 명 선으로 ​​"someText"를 표시

QString someText = "bla bla bla bla bla bla bla bla bla bla bla bla bla"; 
QTextEdit* texEdit = new QTextEdit(); 
textEdit->setLineWrapMode(QTextEdit::FixedColumnWidth); 
texEdit->setLineWrapColumnOrWidth(38); 
texEdit->setWordWrapMode(QTextOption::WordWrap); 
texEdit->setText(someText); 

:

나는이 같은은 QTextEdit에 표시되는 몇 가지 포맷되지 않은 텍스트가 내 QTextEdit에 표시됩니다. 그러나 나는 아직 이것을 달성하지 못했습니다. 포장은 줄 바꿈을 삽입하지 않기 때문에

은 첫째 나는 순진하게도, 불행하게도 나에게 포장 라인을 제공하지 않습니다

textEdit->toPlainText().split("\n") 

을 시도했다.

그래서 나는 QTextDocument가 길을 가고 있다고 생각했는데, 그것은 또한 막 다른 골목이되었다.

QTextDocument* doc = textEdit->document(); 

qDebug() << "document linecount: " << doc->lineCount(); 
qDebug() << "block count:" << doc->blockCount(); 
qDebug() << "lines in block: " << doc->findBlock(1).lineCount(); 

이들 각각은 1

어떤 도움을 크게 감상 할 수 반환, 감사합니다!

답변

4

QTextEdit에 표시된 바와 같이 줄 바꿈 텍스트의 각 줄을 별도의 QString로 가져와야합니다. 맞습니까?

QTextDocument QTextEdit 컨트롤의 텍스트는 단락 (QTextBlock으로 표시)으로 텍스트를 저장하며 각 단락은 텍스트 줄 집합 (QTextLine)으로 배치됩니다. 거기에서 텍스트의 줄을 추출하면됩니다. 여기에 내 코드 샘플이있다.

QStringList splitByLines(const QTextDocument *doc) 
{ 
    if(!doc) 
    return QStringList(); 
    QStringList ret; 
    QTextBlock tb = doc->begin(); 
    while(tb.isValid()) 
    { 
    QString blockText = tb.text(); 
    Q_ASSERT(tb.layout()); 
    if(!tb.layout()) 
     continue; 
    for(int i = 0; i != tb.layout()->lineCount(); ++i) 
    { 
     QTextLine line = tb.layout()->lineAt(i); 
     ret.append(blockText.mid(line.textStart(), line.textLength())); 
    } 
    tb = tb.next(); 
    } 
    return ret; 
} 

지금 당신은 간단하게 호출 할 수 있습니다 splitByLines (textEdit-> 문서()) 당신이 원하는 것을 얻을 수 있습니다. 문서 레이아웃 (documentLayoutChanged() 참조) 또는 내용 (contentsChanged() 참조)이 변경되면 줄을 다시 추출해야합니다.

+0

감사합니다. 이것은 내가 찾고 있었던 바로 그 것이다. 매력처럼 작동합니다. 나는 내가 화가 났다고 생각했다. 매 줄마다 나올 수 있었다. 돌아왔다. 1. 다시 한번 감사드립니다! –

+0

기꺼이 도와 드릴 수 있습니다. 사실, 저는 제가 좋아하는 답변을 upvote 할 수있는 나의 명성을 높이기위한 질문을 찾고있었습니다. 그래서 질문 주셔서 감사합니다;) –