1

特定の関数 vcm_test() からの出力を表示したい、タッチスクリーン ディスプレイを備えたアーム ボードがあります。この関数の出力は、 test.txtというファイルに保存されます。これで、ファイルtest.txtの内容を読み取って、50 ~ 60 行未満の場合にのみqtextEditに表示できるようになりました。一方、 test.txtには 7000 行以上あります。7000 行を表示しようとすると、アーム ボードが読み取りを続け、読み取りが完了するまで何も表示されません。すべての行の後に読んで表示する方法、または10行ごとに言う方法はありますか? readfileでもqProcessを使用することを考えましたが、どうすればそれができるかわかりません。

    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");}

アドバイスをいただければ幸いです。ありがとうございます。

4

1 に答える 1

2

すべての行を読み取ってテキスト編集に追加した後、QApplication::processEvents()を使用できます。ただし、これを使用するときは十分に注意する必要があります。使用することはお勧めしません。また、setText の代わりにQTextEdit::Append()の使用を検討する必要があります。

より良い解決策は、別のスレッドでファイルを読み取り、シグナルとスロットを使用して、QTextEdit に追加する読み取りデータを送信することです。

于 2013-05-17T13:18:09.523 に答える