C++ QT 5.2.0 getOpenFileName慢

C++ QT 5.2.0 getOpenFileName慢,c++,qt,C++,Qt,调用getOpenFileName时,函数通常会挂起5秒钟左右。实际通话是: QString fileName = QFileDialog::getOpenFileName(this, tr("Open XML"),"D:\\xml_reader\\data\\",tr("XML Files (*.xml *.*)")); 我将其发送到的文件夹只包含一个文件,因此这不是因为文件数。 我在调试和发布中都尝试过,它们都遇到了相同的问题 我在网上看到其他人也有类似的问题,但没有解决方案

调用getOpenFileName时,函数通常会挂起5秒钟左右。实际通话是:

  QString fileName = QFileDialog::getOpenFileName(this,
     tr("Open XML"),"D:\\xml_reader\\data\\",tr("XML Files (*.xml *.*)"));
我将其发送到的文件夹只包含一个文件,因此这不是因为文件数。 我在调试和发布中都尝试过,它们都遇到了相同的问题

我在网上看到其他人也有类似的问题,但没有解决方案。 我以前使用过其他版本的QT,但从未遇到过这个问题

  • 不要在调试器下运行应用程序
  • 加载应用程序时,可以强制加载Comdlg32.dll
  • p、 是QuickTime,您正在使用QT

    针对@JohnNeuhaus的特别“摘要”更新:

    问:为什么getOpenFileName很慢

    答:原因:
    Comdlg32.dll
    是延迟加载的库,在第一次调用
    getOpenFileName
    时开始加载。这个加载时间很长。如果已连接调试器,则动态链接时间可能会增加(因为有必要加载.pdb)

    解决方法:在应用程序开始时直接加载“Comctl32.dll”:

    QLibrary lib( "Comctl32.dll" );`
    lib.setLoadHints( QLibrary::ResolveAllSymbolsHint );
    lib.load();
    

    我最近遇到了同样的问题,解决方法是从windows文件资源管理器左侧的快速访问列表中删除一个坏的网络位置。 无法再访问网络位置

    无论是在实际选择文件还是点击取消或关闭按钮时,它都会在发布和调试模式下延迟

    对话框将快速打开,但关闭对话框后,我的应用程序将延迟2-5秒,然后继续执行下一条指令,我通过在调试中单步执行代码以及在发布的下一行打开视觉提示来确认该指令


    最终帮助我意识到问题的是,当它在一个完全不同的应用程序中再次发生时,不是我自己制作的。

    是D:网络驱动器吗?进入getOpenFileName()查看是什么拖拽了它。我发现如果GUI线程中有其他需要大量注意的任务,Qt的文件对话框将无法使用。难道不是这样吗?还没有找到问题的根本原因我在mac osx el capitan上的qt5.5遇到了与每次应用程序执行打开文件对话框时相同的延迟,无论优化如何。没有已知的解决方案。我以前在调试器下运行过Qt应用程序,但没有此问题。它一定是在Qt5.2中或在4.8之后引入的,你错了。它在qt4和qt5上的第一个对话框显示时具有相同的延迟。我研究过这个;)@SaZ“不要在调试器下运行你的应用程序”对于性能问题永远都不是一个可以接受的答案。在调试器中运行它可能会导致性能降低,但这是调试的代价。这就像告诉某人如果在VS@JohnNeuhaus中有Intellisense问题,就使用文本编辑器。我们谈论的是分析,而不是调试。您必须在发布版本(启用代码优化)下配置文件,并且不使用调试器。否则,分析结果将无效。客户不会在打开调试器的情况下使用您的应用程序的调试版本。@SaZ根据问题,我们也没有具体讨论。海报简单地说函数调用很慢,他们尝试了调试和发布。