• QFileDialog::getOpenFileName() hangs


    https://forum.qt.io/topic/49209/qfiledialog-getopenfilename-hangs-in-windows-when-using-the-native-dialog/18

     

    QFileDialog::getOpenFileName() hangs in Windows when using the native dialog

    • kasunf

      Hi,

      I'm using QT 5.3.1 and I noticed that my program hangs in Windows 7 (64bit) with following arguments to the function.

      QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
      "/home",
      tr("Images (*.png *.xpm *.jpg)"));

      However, if I use the option QFileDialog::DontUseNativeDialog, then it won't hang and will show the non-native file open dialog. I would prefer to use the native windows dialog so can anyone tell me if this is a bug or not?


       
       
    •  

    • SGaist Lifetime Qt Champion

      Hi and welcome to devnet,

      Strange but are you aware that you are trying to open a probably non existent folder ? There's no /home on windows. However you can use QDir::home() to get the current user home path


    • kasunf

      Yes, this is just an example syntax for this post.
      My syntax is as follows:

      fileName = QFileDialog::getOpenFileName(this,
      tr("Select file"),
      QString(),
      tr("Files (*.cvs *.svf *.txt)"));


    • SGaist Lifetime Qt Champion

      Do you have any network drive ?


    • kasunf

      No I don't. I just have a C: drive and couple of removable drives, which are not active.
      This problem was reproduced on another PC other than mine.

      [quote author="SGaist" date="1418598787"]Do you have any network drive ?[/quote]


    • SGaist Lifetime Qt Champion

      Which version of Windows ?


    • kasunf

      It is Windows 7 Professional (64bit).

      Looking at the history of Qt, I think this possibly has been a bug for some time (possibly since QT4)....
      I have seen at least 1 reported case of this sort of behaviour....

      [quote author="SGaist" date="1418678949"]Which version of Windows ?[/quote]


    • htettey
    •  

      @SGaist

      I have just recently migrated a project I am working on to Qt5.4.1 from Qt4.8.5, and I am having the same problem as reported by kasunf.

      A call to getOpenFileName hangs - using QFileDialog::DontUseNativeDialog gets it working, but I'll prefer to use te native windows dialog. The code snippet is shown below:

      m_imageFile = QFileDialog::getOpenFileName(this, tr("Open Image"), QDir::homePath(), tr("Image Files (*.png *.jpg *.bmp)"), 0, QFileDialog::DontUseNativeDialog); //works

      m_imageFile = QFileDialog::getOpenFileName(this, tr("Open Image"), QDir::homePath(), tr("Image Files (*.png *.jpg *.bmp)")); //does not work

      Program control does not seem to return from this function call. Has this issue been resolved? My system specifications are as follows:

      Windows7 64bit
      Visual Studio 2010
      Qt5.4.1_opengl

      PS: I did not have this problem with Qt4.8.5

      Thanks,


    • SGaist Lifetime Qt Champion

      Do you mean that when you click OK the dialog disappear but your application doesn't do anything ?


    • htettey
    •  

      @SGaist Nope, that is not what I mean.

      The open fIle dialog does not appear at all - as though my application is waiting for it to appear. After investigations it turns out that it seems to hang in the call to

      QFileDialog::getOpenFileName(...)

      As I indicated, a call to QFileDialog::getOpenFileName(...) using the flag QFileDialog::DontUseNativeDialog returns from the function call, but the same function call without using the flag does not return.

      I will like to use it without the flag. Also, I didn't have this problem in Qt4.8.5.

      Please this is the same problem as first reported on this post. I just need to know what the status of this issue is.

      PS: I am interested in purchasing a commercial license for Qt5, but I need to make sure that my project works in Qt5 before going ahead with the purchase.

      Thanks,


    • SGaist Lifetime Qt Champion

      Which compiler are you using ? Just tested with VS2013 on Win 8 and no problem with the dialog.


    • GirishJ

      Facing exactly same problem on Windows 7 pro (64-bit) with Qt5.5 MSVS2010 Professional with Qt Add-in.


    • mrjj Lifetime Qt Champion

      win 7. 64 bit, Qt 5.5, "gcc"
      No hanging at all.
      So maybe only VS?

      Please Try with QFileDialog::DontUseCustomDirectoryIcons
      As i had case where it would take ages due to subversion overlay icons.


    • Rondog

      I have used most of the Qt versions mentioned in this thread and never had a problem with using the getOpenFileName(...) member function with native dialogs. I have always used MinGW for Windows so maybe this problem is unique to Visual Studio?


    • Wesley
    •  

      @SGaist said:

      Do you have any network drive ?

      I have a problem using the functions QFileDialog::getSaveFileName and QFileDialog::getOpenFileName on a PC with many network drives. Could you please help on this? Thanks.


    • dan-42

      Just to note this issue still exists, but does not happen on all QFileDialogs instances used in our software.

      When does it work:

      On the very first start-screen, when no other backend-threads are running, no COM connection is created etc.

      When does it not work

      Some where later in the application, when backend-threads are running, COM connection to a different application is established.

      Setup:

      Qt 5.12.3
      MSVC 2017 v15.9.7
      Windows 10 build1809

      The issue is reproducible on different computers in Debug and Release Build

      Observations

      Opening The QFileDialog leads to the following:

      The Main-UI is blocked and you can hear the windows-sound that comes, when the UI is blocked because a Dialog is in front and the user clicks somewhere on the Main-UI.

      Then

      Switching between applications (Alt-Tab) then hitting ESC, and the Main-UI is responsible again.
      This indicates, that there is an invisible Dialog on top of the main-UI.

      Opening The QFileDialog again

      Then it works!


    • Gwen5484

      Same symptoms here, with QFileDialog::getExistingDirectory.

      • Before loading the COM objets, the dialog opens well, with native window.
      • After laoding COM (CoInitializeEx), calling getExistingDirectory causes the program to hang.
      • After disconnecting COM (CoUninitialize), the dialog opens well again, but with Qt window (not native) even though I did'nt specify the DontUseNativeDialog option!

      Qt 5.12.1, MSVC 2017, Windows 10


    • JonB

      Clearly nasty COM behaviour. I am not a Qt expert, but since your post and the previous one are nice and clear on the reproducibility, the best would be to (search first and then) report them at https://bugreports.qt.io/secure/Dashboard.jspa, see also https://wiki.qt.io/Reporting_Bugs.


     
     
     

  • 相关阅读:
    LeetCode题目:Gray Code
    LeetCode题目: Remove Duplicate Letters
    非阻塞socket中read、write返回值
    C连接MySql
    使用GDB调试程序
    C语言中使用库函数解析命令行参数
    把服务器当网盘玩 教你从云服务器下载自己的文件
    微信小程序 地图选点 获取用户选择的定位信息 wx.chooseLocation
    如何避免高不成低不就? 疫情当下Java学习路线分享
    微信小程序 获取手机号 JS
  • 原文地址:https://www.cnblogs.com/liujx2019/p/11736854.html
Copyright © 2020-2023  润新知