Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Update: Forum Guidelines & Code of Conduct


    Qt World Summit: Early-Bird Tickets

    Unsolved A couple of problems with QFileDialog

    General and Desktop
    qfiledialog
    3
    8
    5080
    Loading More Posts
    • 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.
    • Psychotron
      Psychotron last edited by 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

      JonB 1 Reply Last reply Reply Quote 0
      • SGaist
        SGaist Lifetime Qt Champion last edited by

        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

        Psychotron 1 Reply Last reply Reply Quote 2
        • Psychotron
          Psychotron @SGaist last edited by Psychotron

          @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 Reply Quote 0
          • Psychotron
            Psychotron last edited by

            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 Reply Quote 0
            • JonB
              JonB @Psychotron last edited by JonB

              @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 Reply Quote 0
              • Psychotron
                Psychotron last edited by Psychotron

                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 Reply Quote 0
                • SGaist
                  SGaist Lifetime Qt Champion last edited by

                  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

                  Psychotron 1 Reply Last reply Reply Quote 1
                  • Psychotron
                    Psychotron @SGaist last edited by Psychotron

                    @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 Reply Quote 0
                    • First post
                      Last post