c++ - QFileDialog:如何在 osX 中从包中打开/选择文件/目录

标签 c++ macos qt package qfiledialog

我用谷歌搜索了很多,但找不到任何相关的解决方案来解决我的问题。

问题:我想打开 .MTS 文件,如果它在任何 目录 中可用,则查找它的工作。但是,如果它在任何 package 中,那么我的 QFileDialog 将无法查看该包并选择那些 .MTS 文件。

代码:

auto filePaths = QFileDialog::getOpenFileNames(this, "Open Video File", lastOpenedPath, "*.MTS;*.mov");
    qDebug() << "File Paths " << filePaths;

现在索尼和松下高清摄像机在 AVCHD(高级视频编码高清) 包下创建的 .MTS 文件默认,我想导入/选择 .MTS 文件。

提示 QFileDialog 可以在Windows 机器上导入/选择那些.MTS 文件,但在mac 机器上无法导入/选择.

非常感谢任何想法。

谢谢。

最佳答案

好吧,如果我理解您想正确地做些什么,我不确定仅在 Qt 中是否可行。

事实证明,简单地调用 Cocoa 和 NSOpenPanel 确实比我预期的要容易。实现我认为您正在寻找的东西。

示例项目位于:https://github.com/NSGod/widgetsOpenFileDialogCocoa

基本上,我重命名为mainwindow.cppmainwindow.mm , 然后添加一个 #import <Cocoa/Cocoa.h> :

#import <Cocoa/Cocoa.h>

void MainWindow::on_openFileButton_clicked()
{
    NSOpenPanel *openPanel = [NSOpenPanel openPanel];
    [openPanel setAllowedFileTypes:[NSArray arrayWithObjects:@"mts", @"mov", nil]];
    [openPanel setAllowsMultipleSelection:YES];
    [openPanel setTreatsFilePackagesAsDirectories:YES];
    [openPanel setTitle:@"Open Video File"];

    NSInteger result = [openPanel runModal];

    QStringList stringList;

    if (result == NSFileHandlingPanelOKButton) {
        NSArray *URLs = [openPanel URLs];
        NSLog(@"URLs == %@", URLs);
        for (NSURL *URL in URLs) {
            stringList += QString::fromNSString(URL.path);
        }
        // do something with stringList
        qDebug() << "filePaths == " << stringList;
    }
}

项目中包含一个 fakeBundle.component目录,OS X 会将其视为一个包(或“包”)。但是通过设置 treatsFilePackagesAsDirectories是,你可以拥有 NSOpenPanel将其视为一个目录(当然,它确实是一个目录)。

这是一张图片,显示了 Finder 如何处理这个 fakeBundle.component目录就像一个文件一样:

enter image description here

NSOpenPanel 中,它被视为一个目录:

enter image description here

关于c++ - QFileDialog:如何在 osX 中从包中打开/选择文件/目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36595747/

相关文章:

c++ - Qt sql查询失败

qt - QNetworkProxyFactory::systemProxyForQuery() 未反射(reflect)系统代理设置的更改

c++ - '../controlpanel.ui' 需要 Qt : No rule to make target 'ui_controlpanel.h' ,。停止

c++ - 如何在我的自定义虚幻引擎模块中#include 插件源文件?

c++ - 如何判断一个类型是否真正可 move 构造

c - 在 Mac OS X 上实现 faccessat(),如何根据给定的目录文件描述符和路径名构造新路径?

java - PyCharm - 无法保存设置 - 无法保存设置。请重启 PyCharm 社区版

c++ - 如何计算固定线程数的均匀分布的作业数?

c++ - 不将 header 与实现分开是否仍然被认为是不好的做法?

macos - 适用于OCaml程序的Mac OS GUI