2013-05-17 30 views
1

我有一個帶觸摸屏顯示器的手臂板,我想在其中顯示某個函數vcm_test()的輸出。該功能的輸出保存到名爲 test.txt的文件中。現在,我可以讀取文件test.txt的內容,並且僅當它小於50-60行時,纔會顯示在我的qtextEdit中。而我在test.txt中有超過7000行。當我嘗試顯示7000行時,臂板會一直讀數,直到讀數完成後才顯示任何內容。是否有任何方法可以在每行之後閱讀和顯示,或者每10行說出一行。我也想過在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()並將其附加到文本編輯中。但是使用這個時你應該非常小心,我不會推薦這樣做。您還應該考慮使用QTextEdit::Append()而不是setText。

更好的解決方案是在另一個線程中讀取文件,並使用信號和插槽發送要讀取的數據到您的QTextEdit中。