我正在使用QFileDialog::getOpenFileName
函数来打开文件。但是,在运行Windows 7的客户端计算机上,这会显示一个损坏的打开文件对话框,如屏幕截图所示,或者崩溃整个应用程序。
我用来打开文件对话框的代码是:
void MainWindow::on_action_triggered() {
auto filename = QFileDialog::getSaveFileName(this, "Generate Report", "", "CSV files (*.csv)");
if (filename.isEmpty()) {
return;
}
// Do operations on filename...
}
我在Visual Studio 2013中使用Qt 5.5。
答案 0 :(得分:6)
此特定情况下的问题最终导致Qt与客户端计算机上安装的Dell备份和恢复软件不兼容,其中包括不兼容的shell扩展。我使用的解决方案是删除备份和恢复软件,但听起来像命名空间Qt也是一种替代方案。有关详细信息,请参阅QTBUG-41416。
答案 1 :(得分:5)
我猜测目录存在问题。作为路径提供的这个空字符串可能有问题。 尝试以这种方式修复:
auto filename = QFileDialog::getSaveFileName(this,
tr("Generate Report"),
QString(),
tr("CSV files (*.csv)"));
// or this way
auto filename = QFileDialog::getSaveFileName(this,
tr("Generate Report"),
QDir::home().absolutePath(),
tr("CSV files (*.csv)"));
答案 2 :(得分:2)
问题的根源似乎是内存损坏。要找到它,请安装Microsoft Application Verifier
并使用Basics\Heaps
配置您的应用。您可以在自己的计算机上执行此操作,即使原始问题无法重现。之后,尝试重现问题,我猜你会发现你的内存损坏。
<强>更新强>
既然问题没有在您的机器上重现并且您说对话框已挂起,我建议执行以下附加步骤(您可以在TeamViewer会话中自行完成所有操作以使其更容易)