试图打开QDialog时代码冻结

时间:2015-08-13 08:43:04

标签: c++ visual-studio qt

我试图在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()'。 所以,我创建了一个不同的新简单项目,仅使用这些语句,并且它按预期工作。

这是我的环境配置问题吗?我尝试调试但是在上面的行中简单地冻结代码没有任何错误。

2 个答案:

答案 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

感谢您的帮助!