QT指定用户保存文件路径QDialog::getExistingDirectory指定无意义节点如我的电脑、网上邻居等崩溃解决方案

本文介绍如何使用Windows API来规避QT中自带的BUG,通过两种方法实现文件路径的选择:一种是不带地址输入的文件夹选择,另一种是允许用户直接输入地址的对话框方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

 
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值