在mac中使用qt 4.7.1 + xcode开发的应用,由于提交到appstore的应用不能使用QFileDialog,因此只能作cococ代码来处理:
QString GetSelectFolderFun( const unsigned short *szPath, int len )
{
QString strResult;
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSOpenPanel *panel = [NSOpenPanel openPanel];
[panel setCanChooseFiles:NO];
[panel setCanChooseDirectories:YES];
[panel setAllowsMultipleSelection:NO];
//[panel setDelegate:nil];
NSString *path = [[NSString alloc] initWithBytes:szPath length:len*2 encoding:NSUTF16LittleEndianStringEncoding];
[panel setDirectoryURL:[NSURL URLWithString: path]];
if( NSFileHandlingPanelOKButton == [panel runModal] )
{
NSArray *arrayFile = [panel URLs];
for( unsigned int i = 0; i < [arrayFile count]; i++ )
{
strResult = [[[arrayFile objectAtIndex:i] path] UTF8String];
}
}
[path release];
[pool drain];
return strResult;
}
但是这样在contextmenu
中通过QAction来调用文件对话框时,对话框一闪就没了。
解决方法:在调用文件对话框之前先调用QCoreApplication::processEvents()。
//appstore can't use QFileDialog, cocoa open filedialog will be setparent
//contextMenu, the filedialog will be hide when contextmenu is hide
QCoreApplication::processEvents();