Новая строка не записывается в файл (Qt) - PullRequest
2 голосов
/ 18 августа 2011

Я веду журнал действий в моем программном обеспечении, используя qtextedit. позже, когда я хочу сохранить его как текст с помощью toPlainText (), полученный текстовый файл представляет собой одну строку без разрывов строк. Я начинаю регистрацию с помощью plainText () и добавляю последующие добавления с помощью append ().

void rocketscience::saveLog(){
QFile logFile;
QTextStream logOut;
QString logfName;

QSettings prevSet("us","fr");

    if (defaultDir.exists(prevSet.value("settings/logPath").toString()))
        logfName= QFileDialog::getSaveFileName(this,"Save File",fName,"Text (*.txt");


    if (logfName!=NULL){

    logFile.setFileName(logfName);
    logFile.open(QIODevice::WriteOnly);
    logOut.setDevice(&logFile);
    logOut<<ui.statusReport->toPlainText();
    logFile.close();
}

}

Ответы [ 3 ]

2 голосов
/ 18 августа 2011

Из ссылки на класс QTextStream (эта строка немного скрыта):

Примечание: В Windows все символы '\ n' пишутся как '\ r \ n', если устройство или строка QTextStream открываются с использованием флага QIODevice :: Text.

, где '\ n' - конец строки UNIX, а '\ r \ n' - конец строки Windows (CR / LF).

Удалите инициализацию QTextStream в начале вашего метода и измените выражение if на следующее:

if (!logfName.isEmpty())
{
    logFile.setFileName(logfName);
    logFile.open(QIODevice::WriteOnly);
    QTextStream logOut(&logFile, QIODevice::Text);
    logOut<<ui.statusReport->toPlainText();
    logFile.close(); 
} 

Также обратите внимание, как я изменил условие if. По умолчанию для logfName установлено значение "", я не уверен, сработает ли сравнение с NULL. Вам лучше использовать функцию QString :: isEmpty ()

1 голос
/ 18 августа 2011

Возможно, файл написан с использованием конца строки UNIX?Вы должны открыть файл в текстовом виде, чтобы получить локальные (Windows) окончания строк:

  logFile.open(QIODevice::WriteOnly|QIODevice::Text);
0 голосов
/ 31 мая 2017

У меня была такая же проблема. Однако решение, данное @Tim Meyer, у меня не сработало. В строке:

QTextStream logOut(&logFile, QIODevice::Text);

Отображается ошибка. Итак, я сделал следующее и работал на QT5.8:

/**
* Method to save a text file.
* @param asFileName: Complete file path, including name and extension.
* @param asText: Text to be written in the file
* @return true if the save was successful, false otherwise.
*/
bool MainWindow::saveFile(QString asFileName, QString asText)
{
    QFile file(asFileName);

    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)){
        QMessageBox::critical(this,"Error","File could not be opened");
        return false;
    }

    QTextStream out(&file);
    out << asText;
    file.close();

    return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...