2013-05-17 2 views
1

터치 스크린 디스플레이가있는 암 보드가 있는데, 여기에 vcm_test() 함수의 출력을 표시하고 싶습니다. 이 함수의 출력은 test.txt이라는 파일에 저장됩니다. 이제 파일 test.txt의 내용을 읽을 수 있으며 내 qtextEdit에 표시되는 것은 50-60 줄 미만인 경우에만 해당합니다. 반면에 나는 test.txt에 7000 개가 넘는 줄이있다. 7000 줄을 표시하려고하면 팔 보드가 계속 읽히고 읽기가 완료 될 때까지 아무 것도 표시되지 않습니다. 모든 행 이후에 읽고 읽고 표시 할 수있는 방법이 있습니까? 나는 readfile에서도 qProcess를 사용한다고 생각했지만 어떻게 할 수 있을지 전혀 모른다.실시간으로 qtextEdit에 표시해야합니다.

connect(ui->readfil, SIGNAL(clicked()), SLOT(readfile())); 
    connect(ui->VCMon, SIGNAL(clicked()), SLOT(vcm_test())); 
    connect(ui->Offloaderon, SIGNAL(clicked()), SLOT(offloader_test())); 
    connect(ui->quitVCM, SIGNAL(clicked()),vcmprocess, SLOT(kill())); 
    connect(ui->quitoffloader, SIGNAL(clicked()),offloaderprocess, SLOT(kill()));} 
    MainWindow::~MainWindow(){ 
     delete ui;} 
    void MainWindow::readfile(){ 
     QString filename="/ftest/test.txt"; 
     QFile file(filename); 
     if(!file.exists()){ 
      qDebug() << "NO file exists "<<filename;} 
     else{ 
      qDebug() << filename<<" found...";} 
     QString line; 
     ui->textEdit->clear(); 
     if (file.open(QIODevice::ReadOnly | QIODevice::Text)){ 
      QTextStream stream(&file); 
      while (!stream.atEnd()){ 
       line = stream.readLine(); 
       ui->textEdit->setText(ui->textEdit->toPlainText()+line+"\n"); 
       qDebug() << "line: "<<line;} 
    } 
    file.close();} 
    void MainWindow::vcm_test(){ 
     vcmprocess->start("/ftest/vcm_test_2");} 
    void MainWindow::offloader_test(){ 
     offloaderprocess->start("/ftest/off_test_2");} 

정말 감사드립니다. 감사합니다.

답변

2

모든 행을 읽고 텍스트 편집에 추가 한 후 QApplication::processEvents()을 사용할 수 있습니다. 그러나 이것을 사용할 때 당신은 정말로 조심해야하며 그렇게하지 않는 것이 좋습니다. setText 대신 QTextEdit::Append()을 사용하는 것도 고려해야합니다.

더 나은 해결책은 다른 스레드에서 파일을 읽고 신호와 슬롯을 사용하여 QTextEdit에 추가 할 읽기 데이터를 보내는 것입니다.

관련 문제