gpt4 book ai didi

c++ - 我无法使用 QFileDialog、C++ QT 保存 .txt 文件

转载 作者:太空宇宙 更新时间:2023-11-04 15:35:20 24 4
gpt4 key购买 nike

这是我的代码:

void MainWindow::save(){
QString fileName = QFileDialog::getSaveFileName(this, tr("Save Text File"), path, tr("Text Files (*.txt)"));
if (fileName != "")
{
QFileInfo info(fileName);
path = info.absoluteDir().absolutePath();
QFile file(path);
if(!file.open(QIODevice::WriteOnly)){
QString text = ui->plainTextEdit->toPlainText();
QTextStream out(&file);
out << text ;
file.close();
}
}
}

但它不会在点击按钮后创建任何 .txt 文件:

connect(ui->saveButton, SIGNAL(clicked(bool)), this, SLOT(save()));

日志:

QIODevice::write (QFile, "C:\Users\kfg\Desktop"): device not open

感谢您的帮助:)

最佳答案

你犯了 2 个错误。

第一个在行中 path = info.absoluteDir().absolutePath();这将为您提供目录的路径,而不是文件的路径。您应该使用 path = info.absoluteFilePath();。参见 QFileInfo::absoluteFilePath() .

接下来是当 open 返回 false(失败)时写入"file"。

我认为你的代码是正确的,你应该使用这样的东西:

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();
}
}

您还应该检查写入文件是否真的成功了。

关于c++ - 我无法使用 QFileDialog、C++ QT 保存 .txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35631710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com