0

私のGUIには、開閉用の2つのスロットがあります。ファイルを開くと、その内容がテキストエディターに表示され、閉じるボタンを押すと、変更がファイルに保存されます。

しかし、もう一度押すと、同じファイルを開いてリロードします。テキストエディタ、空白のエディタには何も表示されません。

ファイルがリロードされないのはなぜですか?

private:
    Ui::MainWindow *ui;

    QFile file;
    QTextStream out;        
    QString url; // the url of the file



void MainWindow::on_actionOpen_triggered()
{
    QString openfileurl = QFileDialog::getOpenFileName();
    if(openfileurl.isEmpty() || openfileurl == url) return;

    file.setFileName(openfileurl);

    //if(file.open(QIODevice::ReadOnly|QIODevice::Text))
    if(file.open(QIODevice::ReadWrite|QIODevice::Text))
    {
        url = openfileurl;
        ui->textEdit->setPlainText(QString::fromUtf8(file.readAll()));
    }

    //Set file to -- Qtextstream
    out.setDevice(&file);

}

void MainWindow::on_actionClose_triggered()
{
    //Set file to -- Qtextstream
    out << ui->textEdit->toPlainText();

    file.close();
    ui->textEdit->clear();

}
4

1 に答える 1

0

この方法を試してください

void MainWindow::on_actionClose_triggered()
{
    //Set file to -- Qtextstream
    out << ui->textEdit->toPlainText();

    file.close();
    ui->textEdit->clear();
    uri.clear();
}

このチェックを行う前に uriをクリアする必要があると思います:if(openfileurl.isEmpty() || openfileurl == url) return;

のときに爆破しopenfileurl == urlます。そして、あなたがuriをクリアしなかった場合、それは確実に行われます。そして、ここにいます:

同じファイルをリロードする

...同じ内容で...したがって、if ステートメントはtrueになり、戻ります。これ が、以下のコードが 2 回目に実行されない理由です。

于 2013-04-25T06:26:18.647 に答える