QFileDialog:使用getOpenFileName允许不存在的文件

时间:2015-04-27 23:16:18

标签: c++ qt

我想用qt编写一个浏览按钮,打开一个标准的查找文件对话框。如果用户在对话框中输入新文件名,我想创建该文件。如果文件存在,我想打开它。

我有一个函数,给定一个字符串将做出决定。但是,如果文件不存在,QFileDialog::getOpenFileName会向用户显示错误,并且QFileDialog::getSaveFileName会要求用户确认如果文件存在则覆盖该文件(我不会这样做)无论如何,所以不应该显示。)

是否实施了可以满足我需求的qt标准,而无需创建从QFileDialog继承的自定义类或诉诸另一种类似毛茸茸的情况?

这是我当前的工作代码,有不良行为......

void Login::browseFile() {
    QString file = ui->txtFile->text();
    if (file.isEmpty()) { file = QDir::homePath(); }
    file = QFileDialog::getOpenFileName(this,
        tr("Select Monage Database"), file,
        tr("Database Files (*.db)"));

    if (!file.isEmpty()) { OpenDb(file); }
}

1 个答案:

答案 0 :(得分:1)

谷歌让我失望,但还有几分钟仔细审查文档,我找到了this

  

QFileDialog :: DontConfirmOverwrite 0x00000004如果选择了现有文件,请不要求确认。默认情况下,请求确认。

我能够将其用于getSaveFileName以实现我想要的功能。我必须指定选项selectedFilter,但只是传递了默认的0

修改后的代码:

void Login::browseFile() {
    QString file = ui->txtFile->text();
    if (file.isEmpty()) { file = QDir::homePath(); }
    file = QFileDialog::getSaveFileName(this,
        tr("Select Monage Database"), file,
        tr("Database Files (*.db)"), 0,
        QFileDialog::DontConfirmOverwrite);

    if (!file.isEmpty()) { OpenDb(file); }
}