我试图在MSVS2010 Professional中调试c ++ / Qt5.5代码。函数具有以下代码行,
/* Static method approach */
QString filters("Music files (*.mp3);;Text files (*.txt);;All files (*.*)");
QString defaultFilter("Text files (*.txt)");
QFileDialog::getSaveFileName(0, "Save file", QDir::currentPath(), filters, &defaultFilter);
对话框根本没有打开,应用程序冻结。
我尝试了替代方案如下。
/* Direct object construction approach */
QFileDialog fileDialog(0, "Save file", QDir::currentPath(), filters);
fileDialog.selectNameFilter(defaultFilter);
fileDialog.exec();
但同样,代码冻结在' fileDialog.exec()'。 所以,我创建了一个不同的新简单项目,仅使用这些语句,并且它按预期工作。
这是我的环境配置问题吗?我尝试调试但是在上面的行中简单地冻结代码没有任何错误。
答案 0 :(得分:2)
我遇到了同样的问题并发现这可能是因为你的UI线程中的COM初始化不好。如果你有某个地方:
HRESULT hres = CoInitializeEx( 0, COINIT_MULTITHREADED );
必须替换为:
HRESULT hres = CoInitializeEx( 0, COINIT_APARTMENTTHREADED );
我认为本机窗口可能正在使用COM调用,因为死锁而只是坐在这里。
答案 1 :(得分:1)
这看起来像Qt中的已知问题。 https://forum.qt.io/topic/49209/qfiledialog-getopenfilename-hangs-in-windows-when-using-the-native-dialog/8
解决方法是使用QFileDialog :: DontUseNativeDialog标志,如下所示。
#define DEF 1,2,3
#if (DEF > 3)
#endif
感谢您的帮助!