Qt

时间:2017-06-28 13:38:26

标签: c++ qt

我正在尝试读取跟踪地址文件(每个都在自己的行上)并附加到每个地址的前面。此输入文件旨在成为我正在尝试构建的缓存模拟器的引擎。我在阅读文件时遇到问题而没有进入无限循环。当我将do-while更改为在错误条件下运行时,我只为do段获得正确的输出。因此,我知道我遇到了一个无限循环的问题,我在讲述我的段时间。也许我很疲惫,无法看到这个功能的问题:

void MainWindow::readFile(){
    infoLabel->setText(tr("Invoked <b>File|Open</b>"));
    QString filename="trace.txt";
    QString path = QDir::currentPath();
    QFile file("//Users//nathan1324//Desktop//trace.txt");
    //file.open(QIODevice::ReadOnly);
    if(!file.exists()){
        qDebug() << "File cannot be found "<<filename;
        qDebug() << " " << path;
    }else{
        qDebug() << filename<<" Opening...";
    }
    QString line;
    textEdit->clear();
    if (file.open(QIODevice::ReadOnly | QIODevice::Text)){
        QTextStream stream(&file);
        do {
            line = stream.readLine();
            textEdit->setText(textEdit->toPlainText()+"0x"+line+"\n");
            qDebug() << "line: "<<line;
        } while (!line.isNull());
    }
    file.close();
}

有关编写此函数的替代方法的任何建议吗?

2 个答案:

答案 0 :(得分:0)

使用atEnd检测流的结束:

  

bool QTextStream :: atEnd()const

     

如果没有更多数据要从QTextStream中读取,则返回true;   否则返回false。这类似于,但不一样   调用QIODevice :: atEnd(),因为QTextStream也考虑了它   内部Unicode缓冲区。

   while (!stream.atEnd()) {
        line = stream.readLine();
        textEdit->setText(textEdit->toPlainText()+"0x"+line+"\n");
        qDebug() << "line: "<<line;
    }

答案 1 :(得分:0)

要添加项目,请使用QTextEdit的附加功能:

  

void QTextEdit :: append(const QString&amp; text)

     

在文本编辑的末尾添加带有文本的新段落。

     

注意:附加的新段落将具有相同的字符格式   和块格式作为当前段落,由位置决定   光标。

迭代QExtStream atEnd()

  

bool QTextStream :: atEnd()const

     

如果没有更多数据要从QTextStream中读取,则返回true;   否则返回false。这类似于,但不一样   调用QIODevice :: atEnd(),因为QTextStream也考虑了它   内部Unicode缓冲区。

<强>代码:

void MainWindow::readFile(){
    infoLabel->setText(tr("Invoked <b>File|Open</b>"));
    QString filename = "trace.txt";
    QString path = QDir::currentPath();
    QFile file("//Users//nathan1324//Desktop//trace.txt");
    if(!file.exists()){
        qDebug() << "File cannot be found "<<filename;
        qDebug() << " " << path;
        return;
    }

    QString line;
    textEdit->clear();
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){
        qDebug() << "Could not open file" << filename;
        return;
    }

    qDebug() << filename<<" Opening...";

    QTextStream stream(&file);

    while (!stream.atEnd()) {
        line = stream.readLine();
        if(!line.isNull()){
            textEdit->append("0x"+line);
            qDebug() << "line: "<<line;
        }
    }
    file.close();
}