新行未写入文件(Qt)

时间:2011-08-18 08:16:57

标签: windows visual-studio-2010 qt

我使用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 个答案:

答案 0 :(得分:2)

从QTextStream类引用(该行有点隐藏):

  

注意:在Windows上,如果使用QIODevice :: Text标志打开QTextStream的设备或字符串,则所有'\ n'字符都将写为'\ r \ n'。

其中'\ 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 :(得分:1)

该文件可能是使用UNIX行结尾编写的?您应该用文本打开文件,以获取本地(Windows)行结尾:

  logFile.open(QIODevice::WriteOnly|QIODevice::Text);

答案 2 :(得分:0)

我有同样的问题。但是,@ 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;
}