我已经google了很多,但是我找到了解决问题的相关方案。
问题:我想打开.MTS
文件及其工作查找,如果它在任何directory
中可用。但如果它在任何package
中,那么我的QFileDialog
无法查看该包并选择那些.MTS
文件。
CODE:
auto filePaths = QFileDialog::getOpenFileNames(this, "Open Video File", lastOpenedPath, "*.MTS;*.mov");
qDebug() << "File Paths " << filePaths;
现在,在.MTS
包下创建的AVCHD(Advanced Video Coding High Definition)
个文件默认位于Sony&amp;松下高清摄像头,我想导入/选择.MTS
个文件。
提示: QFileDialog
能够在Windows机器中导入/选择那些.MTS
文件,但无法在mac机器中导入/选择。
非常感谢任何想法。
感谢。
答案 0 :(得分:2)
好吧,如果我理解你想要做什么,我不确定它在Qt中是否可行。
事实证明,比我想象的更容易只是打电话给Cocoa和NSOpenPanel
来实现我认为你正在寻找的东西。
示例项目位于:https://github.com/NSGod/widgetsOpenFileDialogCocoa
基本上,我将mainwindow.cpp
重命名为mainwindow.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视为一个包(或#34;包&#34;)。但是通过将treatsFilePackagesAsDirectories
设置为YES,你可以让NSOpenPanel
将其视为目录(当然,它确实是这样)。
这是一张图片,显示了Finder如何将此fakeBundle.component
目录视为单个文件:
在NSOpenPanel
中,它被视为目录:
答案 1 :(得分:1)
文件系统目录,通常由Finder向用户显示,就像它是单个文件一样。这样的目录可以是作为文件存储的对象的目录树的顶层,也可以是用于各种目的的其他文件或对象的存档,例如安装程序包或备份存档。
这类似于.mst or .msi file on Windows。与OSX软件包一样,您将无法在其中一个软件包中打开指定的文件。您的系统打开对话框实际上是允许您查看它们的 disservice ,因为您无法打开所述文件。
您的解决方法是将文件从程序包外部复制到程序中,然后打开该文件的副本。