在qt QFileDialog中设置后缀在linux中不起作用,如何解决?
In qt QFileDialog setsuffix is not working in linux, how to solve?
我正在为我的qt应用程序处理保存对话框。 一切正常,但是如果没有在文件名后面添加文件扩展名,则尽管选择了过滤器,它也不会以文件扩展名自动保存。
我知道我需要设置一个默认后缀选项,但即使我这样做了,如果没有给出扩展名,它仍然不会自动添加扩展名。
我发现了其他几个类似的问题,我读到它在 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();
}
编辑:在尝试了多种解决方案后,似乎没有一种有效。但我想它应该有。为什么还有后缀功能...?现在我手动解决了它。但我对此不满意,应该有更好的解决方案/解释。
// add extension if none is found.
if(!fileName.endsWith(".aqt"))
fileName.append(".aqt");
如果您使用静态方法getSaveFileName
则事情似乎可以正常工作:
#include <QFileDialog>
#include <QApplication>
#include <QDebug>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QString fileName = QFileDialog::getSaveFileName(
nullptr, QObject::tr("Save File"),
"teste.aqt",
QObject::tr("AstroQt (*.aqt)"));
qDebug() << " save file name " << fileName << endl;
return app.exec();
}
如果我键入不带扩展名的内容,我会得到带有扩展名的正确文件名。
如果你看一下 QFileDialog 文档,你会发现 getSaveFileName(( 是一个静态函数。因此,此方法无法访问使用setDefaultSuffix()
的类实例的成员。因此,无论您在fileDialog->setDefaultSuffix(...)
中设置什么,都与getSaveFileName()
函数的作用无关。
为了使其正常工作,您必须直接从实例运行对话框。你应该做这样的事情:
QFileDialog fileDialog(this, "Choose file to save");
fileDialog.setDefaultSuffix("json");
fileDialog.setNameFilter("json-files (*.json)");
fileDialog.exec();
QFile f(fileDialog.selectedFiles().first());
QFileInfo fileInfo(f);
QString FILE_NAME(fileInfo.fileName());
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- Ardunio UNO解决了多个重叠的定时器循环
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 两个文件使用彼此的功能-如何解决
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 在java中解决这段代码时面临循环中的问题
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 难以理解某些人解决IOI问题的源代码
- visual c++,如何获取解决方案目录中的代码
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 节俭并发:未解决的外部问题
- IpOpt拒绝解决不受约束的问题
- 如何解决这个超硬恒星的创造问题
- 循环无限运行C++解决骑士之旅问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 为什么这段代码不起作用,我该如何解决?