我正在为我的qt应用程序创建一个保存对话框,一切正常,但是如果没有在文件名后面添加文件扩展名,即使选择了过滤器,它也不会自动保存为文件扩展名。
我知道我需要设置一个defaultsuffix选项,但是即使我这样做了,如果没有给出扩展名,它仍然不会自动添加。
我发现了其他几个类似的问题,我读到它在windows下可以工作,但在linux发行版上可能会失败。如果是这样,有简单的解决方案吗?因为现在,我没有一个工作的解决方案...
void MainWindow::on_actionSave_Chart_As_triggered()
{
QFileDialog *fileDialog = new QFileDialog;
fileDialog->setDefaultSuffix("files (*);;AstroQt aqt (*.aqt)");
QString fileName = fileDialog->getSaveFileName(this, "Save Radix", ui->label_2->text() +".aqt", "AstroQT(*.aqt)");
qDebug() << " save file name " << fileName << endl;
QFile file(fileName);
if (!file.open(QFile::WriteOnly | QFile::Text)) {
QMessageBox::warning(this, "Warning", "Cannot save file: " + file.errorString());
return;
}
setWindowTitle(fileName);
QTextStream out(&file);
QString text = "text that will be saved...";
out << text;
file.close();
}
编辑:在尝试了多种解决方案之后,似乎没有一个能起作用。但我想应该起作用。不然为什么还有aftersuffix函数...?目前我手动解决了这个问题。但我对它不满意,应该有更好的解决方案/解释。
// add extension if none is found.
if(!fileName.endsWith(".aqt"))
fileName.append(".aqt");
2条答案
按热度按时间7vux5j2d1#
如果你使用静态方法
getSaveFileName
,事情似乎可以正常工作:如果我键入不带扩展名的内容,我会得到带扩展名的正确文件名。
dy1byipe2#
如果你看一下QFileDialog文档,你会发现getSaveFileName()是一个静态函数。正因为如此,这个方法无法访问使用
setDefaultSuffix()
的类的示例的成员。因此,无论你在fileDialog->setDefaultSuffix(...)
中设置什么,都与getSaveFileName()
函数的功能无关。为了让它工作,你必须直接从示例运行对话框。你应该这样做: