2012-07-31 5 views
0

문제점 : 내 프로젝트는 QTextEdit 및 QSyntaxHighlighter를 사용하는 매우 단순한 프로젝트이며, .cpp 파일을로드하고 해당 파일의 8 번째 줄만 강조 표시하려고 시도하지만 줄을 강조 표시하도록 요청하면 QTextEdit에서 전체 파일을로드 할 수 없습니다.Qt QTextEdit 텍스트 파일 절반 만로드 중

다음 이미지는 문제를 보여줍니다

enter image description here

응용 프로그램의 관련 코드입니다 다음

void MainWindow::openFile(const QString &path) 
{ 
    QString fileName = path; 

    if (fileName.isNull()) 
     fileName = QFileDialog::getOpenFileName(this, 
      tr("Open File"), "", "C++ Files (*.cpp *.h)"); 

    if (!fileName.isEmpty()) { 
     QFile file(fileName); 
     if (file.open(QFile::ReadOnly | QFile::Text)) 
      editor->setPlainText(file.readAll()); 

     QVector<quint32> test; 
     test.append(8); // I want the eighth line to be highlighted 
     editor->highlightLines(test); 
    } 
} 

및 그러나

#include "texteditwidget.h" 

TextEditWidget::TextEditWidget(QWidget *parent) : 
    QTextEdit(parent) 
{ 
    setAcceptRichText(false); 
    setLineWrapMode(QTextEdit::NoWrap); 

} 



// Called to highlight lines of code 
void TextEditWidget::highlightLines(QVector<quint32> linesNumbers) 
{ 

    // Highlight just the first element 
    this->setFocus(); 
    QTextCursor cursor = this->textCursor(); 
    cursor.setPosition(0); 
    cursor.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, linesNumbers[0]); 
    this->setTextCursor(cursor); 
    QTextBlock block = document()->findBlockByNumber(linesNumbers[0]); 
    QTextBlockFormat blkfmt = block.blockFormat(); 
    // Select it 
    blkfmt.setBackground(Qt::yellow); 
    this->textCursor().mergeBlockFormat(blkfmt); 
} 

을 당신이 원하는 경우 내가 사용했던 cpp 파일로 프로젝트를 테스트해라. (dir ectory FileToOpen \의 diagramwidget.cpp)는, 여기에 내가 많은 시간이를 해결하기 위해 노력하고있다 그리고 나는 이것이 버그의 일이 아니다 궁금해하기 시작 했어

http://idsg01.altervista.org/QTextEditProblem.zip

전체 소스입니다 유사

답변

0

은 QTextEdit 제어가 우아한 해결책이 아니다 비록 setPlainText()이 문제를 해결하는 QApplication:processEvents(); 후 설정, 각 로딩 후 시간이 필요 것 같다.

1

QTextEdit은 한꺼번에 많은 양의 텍스트를 허용 할 수 없습니다. 이 같은 예를 들어, 분할 :

if (!fileName.isEmpty()) { 
    QFile file(fileName); 
    if (file.open(QFile::ReadOnly | QFile::Text)) 
    { 
     QByteArray a = file.readAll(); 

     QString s = a.mid(0, 3000);//note that I split the array into pieces of 3000 symbols. 
     //you will need to split the whole text like this. 
     QString s1 = a.mid(3000,3000); 

     editor->setPlainText(s); 
     editor->append(s1); 
    } 
+0

하지만 "강조 표시"라인에 주석을 달면 QTextEdit가 문제없이이 모든 것을 처리 할 수 ​​있습니다. –

+1

@JohnnyPauling, 왜 이런 일이 발생하는지 말하기는 어렵지만 주기적으로 블록으로 데이터를 분할 할 수 있습니다. 항상 괜찮을거야. – SingerOfTheFall

+0

내 게시물을 보니 Qt 포럼 덕분에 해결되었으므로 어쨌든 당신이 나를 도우려고 노력하는 데 낭비했기 때문에 귀하의 답변을 유용하다고 표시하고 있습니다. 고맙습니다! –