风泥

导航

右键菜单,对话框一闪就没了

在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();

posted on 2015-12-04 15:01  风泥  阅读(328)  评论(0)    收藏  举报