QFileDialog打开本地对话框无响应不弹出本地文件夹窗口
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; }
自己开发了一个股票智能分析软件,功能很强大,需要的关注微信公众号:QStockView
分类:
QT
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2017-08-22 linux下用OCI库访问oracle数据库返回错误Cannot create OCI environment!;
2017-08-22 shell之 printf 输出语句
2017-08-22 shell之算数运算符、逻辑运算符、关系运算符、布尔运算符、文件测试运算符
2017-08-22 shell之参数传递