我使用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();
}
}
答案 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;
}