QFileDialog:如何从 osX 中的包 open/select file/dir
QFileDialog: How to open/select file/dir from package in osX
我在谷歌上搜索了很多,但还是找不到解决我问题的相关方法。
问题: 我想打开 .MTS
文件及其工作查找(如果它在 directory
中可用)。但是,如果它在任何 package
中,那么我的 QFileDialog
将无法查看该包和 select 那些 .MTS
文件。
代码:
auto filePaths = QFileDialog::getOpenFileNames(this, "Open Video File", lastOpenedPath, "*.MTS;*.mov");
qDebug() << "File Paths " << filePaths;
现在在 AVCHD(Advanced Video Coding High Definition)
包下创建的 .MTS
文件在 Sony & Panasonic 高清摄像机中默认,我想 import/select 那 .MTS
个文件。
提示: QFileDialog
能够 import/select Windows mac 中的那些 .MTS
文件,但未能 import/select 在 mac machine.
非常感谢任何想法。
谢谢。
An OSX package 是一个:
File system directory that is normally displayed to the user by the Finder as if it were a single file. Such a directory may be the top-level of a directory tree of objects stored as files, or it may be other archives of files or objects for various purposes, such as installer packages, or backup archives.
这类似于 .mst or .msi file on Windows。与 OSX 包一样,您将无法在其中一个包中打开指定的文件。您的系统打开对话框实际上是在给您造成损害,因为您无法打开上述文件,因为您无法查看这些文件。
您的解决方法是将文件从程序包外部复制到程序中,然后打开文件的副本。
好吧,如果我理解你想要做什么,我不确定单独使用 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会将其视为一个包(或"package")。但是通过将treatsFilePackagesAsDirectories
设置为是的,您可以让 NSOpenPanel
将其视为一个目录(当然,它确实如此)。
这是一张图片,显示了 Finder 如何将此 fakeBundle.component
目录视为单个文件:
在 NSOpenPanel
中,它被视为一个目录:
我在谷歌上搜索了很多,但还是找不到解决我问题的相关方法。
问题: 我想打开 .MTS
文件及其工作查找(如果它在 directory
中可用)。但是,如果它在任何 package
中,那么我的 QFileDialog
将无法查看该包和 select 那些 .MTS
文件。
代码:
auto filePaths = QFileDialog::getOpenFileNames(this, "Open Video File", lastOpenedPath, "*.MTS;*.mov");
qDebug() << "File Paths " << filePaths;
现在在 AVCHD(Advanced Video Coding High Definition)
包下创建的 .MTS
文件在 Sony & Panasonic 高清摄像机中默认,我想 import/select 那 .MTS
个文件。
提示: QFileDialog
能够 import/select Windows mac 中的那些 .MTS
文件,但未能 import/select 在 mac machine.
非常感谢任何想法。
谢谢。
An OSX package 是一个:
File system directory that is normally displayed to the user by the Finder as if it were a single file. Such a directory may be the top-level of a directory tree of objects stored as files, or it may be other archives of files or objects for various purposes, such as installer packages, or backup archives.
这类似于 .mst or .msi file on Windows。与 OSX 包一样,您将无法在其中一个包中打开指定的文件。您的系统打开对话框实际上是在给您造成损害,因为您无法打开上述文件,因为您无法查看这些文件。
您的解决方法是将文件从程序包外部复制到程序中,然后打开文件的副本。
好吧,如果我理解你想要做什么,我不确定单独使用 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会将其视为一个包(或"package")。但是通过将treatsFilePackagesAsDirectories
设置为是的,您可以让 NSOpenPanel
将其视为一个目录(当然,它确实如此)。
这是一张图片,显示了 Finder 如何将此 fakeBundle.component
目录视为单个文件:
在 NSOpenPanel
中,它被视为一个目录: