我正在为我的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(); 
} 

编辑:尝试了多种解决方案后,似乎没有一个可行。但我猜应该有。为什么还有后缀功能...?现在,我解决了它手动执行的问题。但是我对此不满意,应该有更好的解决方案/解释。
// 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(); 
} 

如果键入不带扩展名的文件,则得到带扩展名的正确文件名。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!