【问题标题】:getOpenFileName - preselect last opened not workinggetOpenFileName - 预选上次打开不工作
【发布时间】:2017-08-11 10:39:16
【问题描述】:

在我的应用程序中,我需要加载许多图像。我真的会使用一个选项来选择最后打开的文件,所以我想知道最后选择的文件。文档说:

QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
                                            "/home",
                                            tr("Images (*.png *.xpm *.jpg)"));

文件对话框的工作目录将被设置为 dir。如果 dir 包含文件名,则将选择该文件。

所以我应该将上次打开的文件路径保存在某处,然后将其插入而不是“/home”。但这不起作用。在打开文件对话框中,文件名被剥离到最后几个字符,并且没有选择文件。 怎么了?是bug吗?

我当前的代码:

QString fileName = QFileDialog::getOpenFileName(this, "Select file", 
    lastUsedFile, "Image Files (*.png *.jpg *.jpg *.bmp);; JPEG(*.jpg *.jpeg);; PNG(*.png);; BMP(*.bmp)");

if (!fileName.isEmpty())
    lastUsedFile = fileName;

我想要实现的是选择并滚动到文件。

【问题讨论】:

    标签: c++ qt qfiledialog qsettings qfileinfo


    【解决方案1】:

    它是 QFileDialog::getOpenFileName() 的第三个参数。然后你必须将它存储在 QSettings 中。

    例如:

    QString fileName = QFileDialog::getOpenFileName(
            this, tr("Open file"), 
            Settings.value(DEFAULT_DIR).toString(),
            tr("Images (*.png *.xpm *.jpg)");
    
    if (!fileName.isEmpty()) {
       QDir curDir;
       Settings.setValue(DEFAULT_DIR, curDir.absoluteFilePath(fileName));
    }
    

    【讨论】:

    • 正如我所说,这并没有按预期工作。这是示例:!IMAGE 这是正在保存的内容,以及加载到对话框中的内容(没有选择文件,原因是名称无效)
    • 实际上加载到对话框的内容应该是正确的。您看到屏幕截图上的文本选择了吗?尝试按主页按钮,您将看到输入包含文件的全名。真的不知道这是 Qt 问题还是标准文件打开对话框的问题,因为您在 Windows 上默认使用系统之一。但是,您可以使用 DontUseNativeDialog 选项覆盖它。
    • 我认为这是正确的。非本机对话框显示正确的文件名(但天哪,它难看吗)。所以这一定是原生的错误。但是没有像我想要的那样选择文件(就像它被点击一样),是否可以将对话框滚动到该文件?并突出显示它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多