Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. A couple of problems with QFileDialog

A couple of problems with QFileDialog

Scheduled Pinned Locked Moved Unsolved General and Desktop
qfiledialog
8 Posts 3 Posters 6.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • PsychotronP Offline
    PsychotronP Offline
    Psychotron
    wrote on last edited by Psychotron
    #1

    Hello, I am trying to use QFileDialog in two different ways, but each has an annoying problem. Using Windows 7, Visual Studio 2015 with an MFC/Qt hybrid app, Qt 5.8.

    1. When I pass option DontUseNativeDialog to getOpenFilename, the File Open dialog shows in the file list only the file with the name passed in as third parameter to getOpenFilename. I want to see all files, just want to initialize the File name: text box to a pre-defined file name so it can be quickly selected.
    QString strFilter = "Media Files (*.ts;*.mpg);;All Files (*.*)";
    QString filePathName = "c:\\temp\\abc.ts";
    QFileDialog fileDlg;
    QString OpenedFileName = fileDlg.getOpenFilename(Q_NULLPTR, "Open", filePathName, strFilter, Q_NULLPTR, QFileDialog::DontUseNativeDialog);
    
    1. When I do not pass any options, so it's using the native (Windows) file dialog, the File Open dialog does not have problem #1, but shows the file name (passed in as third parameter) in the File name: text box cut off with the front part of it missing. There is plenty of room to show the whole file name but only the last 20 characters or so are shown, but depends on its length. Code is same as above, except below:
    QString OpenedFileName = fileDlg.getOpenFilename(Q_NULLPTR, "Open", filePathName, strFilter);
    

    Any suggestions?
    Thanks

    JonBJ 1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi and welcome to devnet,

      One thing that is done wrong is the filePathName content. Using backslashes like that you are escaping t and a. Since you are using Qt, use only forward slashes paths or use double slashes on Windows.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      PsychotronP 1 Reply Last reply
      2
      • SGaistS SGaist

        Hi and welcome to devnet,

        One thing that is done wrong is the filePathName content. Using backslashes like that you are escaping t and a. Since you are using Qt, use only forward slashes paths or use double slashes on Windows.

        PsychotronP Offline
        PsychotronP Offline
        Psychotron
        wrote on last edited by Psychotron
        #3

        @SGaist Thanks. That was just for the purposes of this post. I am not really setting the filename explicitly. I have a proper filename that is opening a file properly, just not displaying like I want.

        1 Reply Last reply
        0
        • PsychotronP Offline
          PsychotronP Offline
          Psychotron
          wrote on last edited by
          #4

          In addition, sometimes when I call fileDlg.getOpenFileName(...) it intermittently crashes on that line, access violation reading location 0xffffffffffffffff. Sometimes the 2nd time, sometimes the 10th time, never on the 1st time.

          1 Reply Last reply
          0
          • PsychotronP Psychotron

            Hello, I am trying to use QFileDialog in two different ways, but each has an annoying problem. Using Windows 7, Visual Studio 2015 with an MFC/Qt hybrid app, Qt 5.8.

            1. When I pass option DontUseNativeDialog to getOpenFilename, the File Open dialog shows in the file list only the file with the name passed in as third parameter to getOpenFilename. I want to see all files, just want to initialize the File name: text box to a pre-defined file name so it can be quickly selected.
            QString strFilter = "Media Files (*.ts;*.mpg);;All Files (*.*)";
            QString filePathName = "c:\\temp\\abc.ts";
            QFileDialog fileDlg;
            QString OpenedFileName = fileDlg.getOpenFilename(Q_NULLPTR, "Open", filePathName, strFilter, Q_NULLPTR, QFileDialog::DontUseNativeDialog);
            
            1. When I do not pass any options, so it's using the native (Windows) file dialog, the File Open dialog does not have problem #1, but shows the file name (passed in as third parameter) in the File name: text box cut off with the front part of it missing. There is plenty of room to show the whole file name but only the last 20 characters or so are shown, but depends on its length. Code is same as above, except below:
            QString OpenedFileName = fileDlg.getOpenFilename(Q_NULLPTR, "Open", filePathName, strFilter);
            

            Any suggestions?
            Thanks

            JonBJ Offline
            JonBJ Offline
            JonB
            wrote on last edited by JonB
            #5

            @Psychotron

            http://doc.qt.io/qt-5/qfiledialog.html#getOpenFileName:

            I want to see all files

            I think you need to set selectedFilter to something like the *.* (instead of Q_NULLPTR) from your strFilter, assuming that is not selected initially it will only currently be showing you *.ts;*.mpg initially?

            QFileDialog::DontUseNativeDialog: Docs claim:

            On Windows, and macOS, this static function will use the native file dialog and not a QFileDialog.

            Never mind behaviour, are you seeing any visual difference in overall dialog between your existing two calls?

            shows the file name (passed in as third parameter) in the File name: text box cut off with the front part of it missing.

            Wouldn't surprise me if the directory path is removed leaving only the filename at the right? Make sure your separators passed in are /s rather than \s.

            when I call fileDlg.getOpenFileName(...) it intermittently crashes

            It's a static method. You should be calling QFileDialog::getOpenFileName(...) ? Don't know what your fileDlg is, but if it's some kind of instance you've created that could be your prob here.... Ah, you are creating an instance (QFileDialog fileDlg;), that's perhaps the cause of all your probs here?

            1 Reply Last reply
            0
            • PsychotronP Offline
              PsychotronP Offline
              Psychotron
              wrote on last edited by Psychotron
              #6

              I believe my main problem here in #1 was in the filter. Should be a space between *.ts and *.mpg not a semicolon. Due to my team's preference, I am not passing the DontUseNativeDialog option now, so using the Windows native dialogs, and am having a problem with both the File Open and File Save dialogs crashing intermittently. I don't think we saw the crash with the DontUseNativeDialog option. Here is my code for both Open and Save. The open and save crash maybe every 5-10 times they are called in Debug. Don't really have any data on Release. Any ideas?

              //File open dialog
              QString strFilter = "Media Files (*.ts *.mpg);;All Files (*.*)";
              QString filePathName = <valid full path to filename with \\ as delimiters>
              QString openedFileName = QFileDialog::getOpenFileName( Q_NULLPTR, "Open", filePathName, strFilter );
              
              //File save dialog
              QString filePathName = <valid full path to filename with \\ as delimiters>
              QString savedFileName = QFileDialog::getSaveFileName( Q_NULLPTR, "Save As", filePathName, "TS (*.ts)" );
              

              Any reason I should replace the \ with / in the filenames before calling the static functions?
              Thanks

              1 Reply Last reply
              0
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #7

                Can you post a stack trace of your crash ?

                As for the / vs \: coherence and simplicity. Using / everywhere avoids you to have to write ifdefs when you prepare a path for *nix system and for Windows.

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                PsychotronP 1 Reply Last reply
                1
                • SGaistS SGaist

                  Can you post a stack trace of your crash ?

                  As for the / vs \: coherence and simplicity. Using / everywhere avoids you to have to write ifdefs when you prepare a path for *nix system and for Windows.

                  PsychotronP Offline
                  PsychotronP Offline
                  Psychotron
                  wrote on last edited by Psychotron
                  #8

                  @SGaist

                  void DisplayDlg::on_pushButtonLoad_clicked()
                  {
                  	QString fileName = QFileDialog::getOpenFileName(Q_NULLPTR, tr("Open Overlay"), "", "XML (*.xml)");  //This line crashes sometimes.  Haven't seen it crash if I add option DontUseNativeDialog.
                  ...
                  }
                  
                  mfc140d.dll!000007fec6f97e0c()	Unknown
                  mfc140d.dll!000007fec6f5342c()	Unknown
                  mfc140d.dll!000007fec6f52832()	Unknown
                  user32.dll!0000000076ed9bdd()	Unknown
                  user32.dll!0000000076ee6189()	Unknown
                  user32.dll!0000000076ee4ea7()	Unknown
                  user32.dll!0000000076ee4f36()	Unknown
                  user32.dll!0000000076ee4f6c()	Unknown
                  comdlg32.dll!000007feff1628e8()	Unknown
                  qwindowsd.dll!000007fec494e5d1()	Unknown
                  qwindowsd.dll!000007fec495b823()	Unknown
                  qwindowsd.dll!000007fec495b7a5()	Unknown
                  Qt5Widgetsd.dll!00000000650ca1d2()	Unknown
                  Qt5Widgetsd.dll!0000000065048a8e()	Unknown
                  Qt5Widgetsd.dll!0000000065048920()	Unknown
                  MYDLL.dll!DisplayDlg::on_pushButtonLoad_clicked() Line 683	C++
                  MYDLL.dll!DisplayDlg::qt_static_metacall(QObject * _o, QMetaObject::Call _c, int _id, void * * _a) Line 128	C++
                  MYDLL.dll!DisplayDlg::qt_metacall(QMetaObject::Call _c, int _id, void * * _a) Line 184	C++
                  Qt5Cored.dll!000000006715df44()	Unknown
                  Qt5Cored.dll!00000000671a5e04()	Unknown
                  Qt5Cored.dll!00000000671a5488()	Unknown
                  Qt5Widgetsd.dll!0000000064fe877d()	Unknown
                  Qt5Widgetsd.dll!0000000064fea8b4()	Unknown
                  Qt5Widgetsd.dll!0000000064fe9977()	Unknown
                  Qt5Widgetsd.dll!0000000064fe8f37()	Unknown
                  Qt5Widgetsd.dll!0000000064cd695d()	Unknown
                  Qt5Widgetsd.dll!0000000064fe89cb()	Unknown
                  Qt5Widgetsd.dll!0000000065006011()	Unknown
                  Qt5Widgetsd.dll!0000000064c76f3e()	Unknown
                  Qt5Widgetsd.dll!0000000064c7217c()	Unknown
                  Qt5Cored.dll!000000006714f666()	Unknown
                  Qt5Cored.dll!00000000672b5cbb()	Unknown
                  Qt5Widgetsd.dll!0000000064c79633()	Unknown
                  Qt5Widgetsd.dll!0000000064d20e37()	Unknown
                  Qt5Widgetsd.dll!0000000064d1f60a()	Unknown
                  Qt5Widgetsd.dll!0000000064c76f3e()	Unknown
                  Qt5Widgetsd.dll!0000000064c71973()	Unknown
                  Qt5Cored.dll!000000006714f666()	Unknown
                  Qt5Cored.dll!00000000672b5cbb()	Unknown
                  Qt5Guid.dll!000007fedd97c19a()	Unknown
                  Qt5Guid.dll!000007fedd97ed13()	Unknown
                  Qt5Guid.dll!000007fedd939a45()	Unknown
                  qwindowsd.dll!000007fec499fe82()	Unknown
                  Qt5Cored.dll!000000006720ad0d()	Unknown
                  [External Code]	
                  MYAPP.exe!WinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, char * lpCmdLine, int nCmdShow) Line 26	C++
                  [External Code]
                  
                  1 Reply Last reply
                  0

                  • Login

                  • Login or register to search.
                  • First post
                    Last post
                  0
                  • Categories
                  • Recent
                  • Tags
                  • Popular
                  • Users
                  • Groups
                  • Search
                  • Get Qt Extensions
                  • Unsolved