标签:
Obj-C 实现 QFileDialog函数(getOpenFileName/getOpenFileNames/getExistingDirectory/getSaveFileName)
/**************************************************************************
@QFileDialog::getOpenFileName
@param pChDefFilePath:[input]Default file path
@param pChFormat:[input]Save file format
@param pChOpenFile:[output]Get the open file path
@return: true, success;
**************************************************************************/
bool MacGetOpenFileName(const char *pChDefFilePath, const char *pChFormat, char *pChOpenFile)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
bool bRet = false;
NSOpenPanel *nsPanel = [NSOpenPanel openPanel];
[nsPanel setCanChooseFiles:YES];
[nsPanel setCanChooseDirectories:NO];
[nsPanel setAllowsMultipleSelection:NO];
NSString *nsDefFilePath = [[NSString alloc] initWithFormat: @"%s", pChDefFilePath];
[nsPanel setDirectory:nsDefFilePath];
NSString *nsFormat = [[NSString alloc] initWithFormat: @"%s", pChFormat];
if (0 != [nsFormat length])
{
NSArray *nsFormatArray = [nsFormat componentsSeparatedByString:@","];
[nsPanel setAllowedFileTypes:nsFormatArray];
}
memset(pChOpenFile, 0, 256);
if (NSFileHandlingPanelOKButton == [nsPanel runModal])
{
NSString *nsOpenFile = [[nsPanel URL] path];
int iLen = [nsOpenFile length];
const char *pChOpenFilePath = [nsOpenFile UTF8String];
memcpy(pChOpenFile, pChOpenFilePath, iLen);
bRet = true;
}
[nsDefFilePath release];
[nsFormat release];
[pool drain];
return bRet;
}
eg:
char chOpenFileName[256] = {0};//选择文件
if (MacGetOpenFileName(strDefFile.toStdString().c_str(), "txt,png", chOpenFileName))//多个后缀用“,”间隔,支持所有文件格式用“”
{
printf("Open file path=%s",chOpenFileName);
}
/**************************************************************************
@QFileDialog::getOpenFileNames
@param pChDefFilePath:[input]Default file path
@param pChFormat:[input]Save file format
@param vFileNameList:[output]Get the open file list
@return: true, success;
**************************************************************************/
bool MacGetOpenFileNames(const char *pChDefFilePath, const char *pChFormat, std::vector<std::string> &vFileNameList)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
bool bRet = false;
NSOpenPanel *nsPanel = [NSOpenPanel openPanel];
[nsPanel setCanChooseFiles:YES];
[nsPanel setCanChooseDirectories:NO];
[nsPanel setAllowsMultipleSelection:YES];
NSString *nsDefFilePath = [[NSString alloc] initWithFormat: @"%s", pChDefFilePath];
[nsPanel setDirectory:nsDefFilePath];
NSString *nsFormat = [[NSString alloc] initWithFormat: @"%s", pChFormat];
if (0 != [nsFormat length])
{
NSArray *nsFormatArray = [nsFormat componentsSeparatedByString:@","];
[nsPanel setAllowedFileTypes:nsFormatArray];
}
vFileNameList.clear();
if (NSFileHandlingPanelOKButton == [nsPanel runModal])
{
NSArray *nsSelectFileArray = [nsPanel URLs];
unsigned int iCount = [nsSelectFileArray count];
for (unsigned int i=0; i<iCount; i++)
{
std::string strSelectFile = [[[nsSelectFileArray objectAtIndex:i] path] UTF8String];
vFileNameList.push_back(strSelectFile);
}
if (iCount > 0)
{
bRet = true;
}
}
[nsDefFilePath release];
[nsFormat release];
[pool drain];
return bRet;
}
eg:
std::vector< std::string> vFileList;//选择文件列表
QString strDefFile;//默认文件路径
if (MacGetOpenFileNames(strDefFile.toStdString().c_str(), "txt,png", vFileList))//多个后缀用“,”间隔,支持所有文件格式“”
{
unsigned int iCount = vFileList.size();
for (unsigned int i=0; i<iCount; i++)
{
printf("Selected file[%i]=%s\n", i, vFileList.at(i).c_str());
}
}
/**************************************************************************
@QFileDialog::getExistingDirectory
@param pChFilePath:[input]Default select file path
@param pChAgentNums: [output]Selected directory path
@return: true, get directory path success;
**************************************************************************/
bool MacGetExistDirectoryPath(const char *pChFilePath, char *pChSelectDir)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
bool bRet = false;
NSOpenPanel *nsPanel = [NSOpenPanel openPanel];
[nsPanel setCanChooseFiles:NO];
[nsPanel setAllowsMultipleSelection:NO];
[nsPanel setCanChooseDirectories:YES];
NSString *nsStrFilePath = [[NSString alloc] initWithFormat:@"%s", pChFilePath];
[nsPanel setDirectory:nsStrFilePath];
memset(pChSelectDir, 0, 256);
if (NSFileHandlingPanelOKButton == [nsPanel runModal])
{
NSArray *nsSelectFiles = [nsPanel filenames];
if ([nsSelectFiles count] >= 1)
{
NSString *nsDirectoryPath = [nsSelectFiles objectAtIndex:0];
int iLen = [nsDirectoryPath length];
const char *pChDirectoryPath = [nsDirectoryPath UTF8String];
memcpy(pChSelectDir, pChDirectoryPath, iLen);
bRet = true;
}
}
[pool drain];
return bRet;
}
eg:
char chDirectory[256] = {0};//选择文件夹
QString strDefFile;//默认文件路径
if (MacGetExistDirectoryPath(strDefFile.toStdString().c_str(), chDirectory))
{
printf("Selected diroctory=%s",chDirectory);
}
/**************************************************************************
@QFileDialog::getSaveFileName
@param pChDefFilePath:[input]Default file path
@param pChFormat:[input]Save file format
@param pChSaveFile:[output]Get the save file path
@return: true, success;
**************************************************************************/
bool MacGetSaveFileName(const char *pChDefFilePath, const char *pChFormat, char *pChSaveFile)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
bool bRet = false;
NSSavePanel *nsPanel = [NSSavePanel savePanel];
[nsPanel setCanCreateDirectories:YES];
NSString *nsDefFilePath = [[NSString alloc] initWithFormat: @"%s", pChDefFilePath];
[nsPanel setDirectory:nsDefFilePath];
NSString *nsFormat = [[NSString alloc] initWithFormat: @"%s", pChFormat];
if (0 != [nsFormat length])
{
NSArray *nsFormatArray = [nsFormat componentsSeparatedByString:@","];
[nsPanel setAllowedFileTypes:nsFormatArray];
}
memset(pChSaveFile, 0, 256);
if (NSFileHandlingPanelOKButton == [nsPanel runModal])
{
NSString *nsSaveFile = [[nsPanel URL] path];
int iLen = [nsSaveFile length];
const char *pChSaveFilePath = [nsSaveFile UTF8String];
memcpy(pChSaveFile, pChSaveFilePath, iLen);
bRet = true;
}
[nsDefFilePath release];
[nsFormat release];
[pool drain];
return bRet;
}
eg:
char chSaveFile[256] = {0};保存文件
QString strDefFile;//默认文件路径
if (MacGetSaveFileName(strDefFile.toStdString().c_str(), "txt,png", chSaveFile))//多个后缀用“,”间隔
{
printf("Save file path=%s",chSaveFile);
}
标签:
原文地址:http://www.cnblogs.com/sz-leez/p/4314629.html