QT自带的BUG可以用windowsAPI避开,方法如下:
方法一:不带地址输入
QString strFilePath;
TCHAR szPathName[MAX_PATH] = {0};
BROWSEINFO bInfo = {0};
bInfo.hwndOwner = GetForegroundWindow(); // 父窗口;
bInfo.ulFlags = BIF_RETURNONLYFSDIRS|BIF_UAHINT;
LPITEMIDLIST lpDlist;
lpDlist = SHBrowseForFolder(&bInfo);
if ( nullptr == lpDlist ) // 单击了确定按钮;
return ;
SHGetPathFromIDList(lpDlist, szPathName);
strFilePath =QString::fromWCharArray( szPathName);
ui->Lispath->setText(strFilePath+"\\");
方法二:对话框可以输入地址
bool SettingDlg::GetstrFilePath(QString &filepath)
{
CShellFileOpenDialog fileDlg(NULL, FOS_FORCEFILESYSTEM | FOS_PATHMUSTEXIST | FOS_FILEMUSTEXIST | FOS_PICKFOLDERS);
if ( fileDlg.DoModal() == IDOK )
{
CString sImgPath;
fileDlg.GetFilePath(sImgPath);
filepath = CStoQS( sImgPath);
}
if ( !filepath.isEmpty() && filepath[ filepath.length() - 1 ] != '\\' )
filepath += '\\';
return true;
}