首页 > 其他分享 >QFileDialog打开本地对话框无响应不弹出本地文件夹窗口

QFileDialog打开本地对话框无响应不弹出本地文件夹窗口

时间:2022-08-22 00:44:45浏览次数:87  
标签:CoInitializeEx 初始化 return 对话框 QFileDialog 本地 COM

1.问题描述

今天遇到很奇怪的问题,QString strFile = QFileDialog::getOpenFileName(this, "选择Excel文件", m_defalutPath, tr("Exel file(*.xls *.xlsx)"));老是打不开系统保存文件的对话框,代码调试发现执行到这一句,就卡死了,阻塞,没有继续往下走;新建一个工程,可以打开,放到构造函数中,可以打开,最后一个参数设置为QFileDialog::DontUseNativeDialog可以打开QT的选择对话框,可就是放到成员函数中打不开;搞了一下午;

后来在一个英文网站找到了原因;https://stackoverflow.com/questions/31983412/code-freezes-on-trying-to-open-qdialog

因为程序当中,使用了CoInitializeEx函数,这个函数会以独占的方式使用COM端口发送消息,执行命令, QFileDialog::getOpenFileName函数也需要通过COM端口发送消息,造成死锁。

int TextToSpeech::Init()
{
    //初始化COM组件
    ::CoUninitialize();
    if(FAILED(::CoInitializeEx(NULL,0)))
    {
        //MessageBox("初始化COM组件失败!", "提示", MB_OK|MB_ICONWARNING);
        return -1;
    }
    m_bComInit = TRUE;
    if (CreateSpVoice() == -1)
    {
        return -1;
    }
    //SetVolume(10);
    return 0;
}

2.解决办法

将CoInitializeEx(NULL,0))改成CoInitializeEx(NULL,COINIT_APARTMENTTHREADED),COINIT_APARTMENTTHREADED意思是在分离的线程中初始化COM

int TextToSpeech::Init()
{
    //初始化COM组件
    ::CoUninitialize();
    if(FAILED(::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED)))
    {
        //MessageBox("初始化COM组件失败!", "提示", MB_OK|MB_ICONWARNING);
        return -1;
    }
    m_bComInit = TRUE;
    if (CreateSpVoice() == -1)
    {
        return -1;
    }
    //SetVolume(10);
    return 0;
}

 

标签:CoInitializeEx,初始化,return,对话框,QFileDialog,本地,COM
From: https://www.cnblogs.com/bclshuai/p/16611528.html

相关文章

  • js实现保存图片到本地
    当你想分享你的带二维码的宣传图片给别人的时候,一般要先将文件下载到本地,再去微信、或QQ等软件分享出去。直接上代码://fetch有同源策略,本地调试注意要起服务器......
  • 将本地项目托管到码云步骤
    初始化本地项目将本地项目交由git管理在项目根目录执行命令:gitinit将项目中所有文件添加到暂存区gitadd.将暂存区内容提交到仓库区gitcommit-m"initproject"......
  • redhat7.9挂载本地ISO镜像为yum源
    将镜像文件复制到服务器的root目录新建一个更新源文件cat/etc/yum.repos.d/local_iso.repo[localiso]name=redhat_localbaseurl=file:///mnt/enable=1gpgcheck=0 挂......
  • windows本地前后端分离,项目部署+内网穿透
    windows本地前后端分离,项目部署+内网穿透前端部署(vue,nginx)修改配置文件的后端接口地址(你准备部署到外网的接口地址)在终端运行:npmrunbuild(此时会在项目里生成dist......
  • MarkDown 本地图片快速上传到博客园
    到.NETDownloads下载.NET5打开CMD之类的终端,运行dotnettoolinstall--globaldotnet-cnblog安装dotnet-cnblogs-tool到博客后台创建Token,并复制运行......
  • [记录]修改Windows系统的本地用户名(包括C:\Users\***)
    目录前言我的笔记本电脑配置修改步骤前言一开始买了笔记本电脑后,不懂事,随手就把电脑用户名设置成了中文。作为一名程序猿,实在是觉得别扭,故在网络上寻找修改用户名的方......
  • ClickHouse 本地Docker版搭建及Go链接体验Demo
    1,Win10用Docker启动单机版本ClickHouseWin10上用WSL搭建Docker环境部署就不讲了,直接上ClickHouse的镜像部署;找到官方Docker镜像库,搜索选中:clickhouse/clickhouse-se......
  • 【3A游戏开发分享】本地化前序
    本文将讲述一些项目面临着出海的本地化问题 一.不同语言中的字的长度通常相同的词在不同语言中,也会有不同长度的表示。就比方说,“你好”在中文就占有两个字的宽度,而在......
  • Charles本地映射操作
    一、介绍Charles本地映射类似于断点修改参数,断点会有一个服务器的响应时间,如果操作过程超出了服务器的响应时间,断点修改参数的效果就体现不出来。Charles本地映射确......
  • 无网络使用本地maven仓库配置,构建上传sonarqube进行代码检查
    #前提需要本地仓库下存在项目的所有依赖包1.mavensettings.xml文件配置。如果idea和本地mvn环境使用的settings.xml路径不一致。则需要同步修改。<!--#前提需要本......