你犯了2个错误。
第一个在该行中,path = info.absoluteDir().absolutePath();
这将为您提供目录的路径,而不是文件。你应该使用path = info.absoluteFilePath();
. 见QFileInfo::absoluteFilePath()
。
open
接下来是您在返回false
(失败)时写入“文件” 。
我认为要使您的代码正确,您应该使用以下内容:
void MainWindow::save()
{
QString fileName = QFileDialog::getSaveFileName(this, tr("Save Text File"), path, tr("Text Files (*.txt)"));
if (fileName != "")
{
QFile file(QFileInfo(fileName).absoluteFilePath());
if (file.open(QIODevice::WriteOnly))
{
QString text = ui->plainTextEdit->toPlainText();
QTextStream out(&file);
out << text;
file.close();
}
else
{
//TODO: Error message
}
}
}
您可能还想检查文件是否已经存在并询问用户是否可以覆盖它...
void MainWindow::save()
{
QString fileName = QFileDialog::getSaveFileName(this, tr("Save Text File"), path, tr("Text Files (*.txt)"));
if (fileName != "")
{
QFile file(QFileInfo(fileName).absoluteFilePath());
if (file.exists())
{
QMessageBox::StandardButton chosenButton
= QMessageBox::warning(this, tr("File exists"), tr("The file already exists. Do you want to overwrite it?"),
QMessageBox::Ok | QMessageBox::Cancel,
QMessageBox::Cancel);
if (chosenButton != QMessageBox::Ok)
{
return; //Save was cancelled
}
}
if (!file.open(QIODevice::WriteOnly))
{
QMessageBox::critical(this, tr("Error"), tr("Failed to save file"));
return; //Aborted
}
//All ok - save data
QString text = ui->plainTextEdit->toPlainText();
QTextStream out(&file);
out << text;
file.close();
}
}
您还应该检查写入文件是否实际成功。