Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

[solved]QFileDialog using different name filters



  • Hello,

    first of all, I'm new with QT. I started with some readings and some examples. Now I'm working on a 3D image/video viewer for distributed system. My configuration is a environment with 1 wall, 1 server and 2 clients. The server opens the image/video and sends it over network to the clients which creates the visualisation for each eye. So far my project.
    I allready can open images and send them over network and display them. My problem is the QFileDialg. First I tried it with the function getOpenFileName (see below). That works fine for me until I came to the point were i tried to open videos as well. With that function I didn't find a way to see which name filter is used.

    @// this filedialog uses the function, no possibility to get the selected file format
    QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
    QDir::currentPath(),
    tr("JPG Files (.jpg .jpeg);;MPO files (.mpo);;Stereo JPEG (.jps);;3D Videos (*.avi)"));
    ......
    @

    To solve that problem I creaed a QFileDialog class and replaced the function with it (see below). I connected the signal filterSelected() with a function which saves the QString. That works fine, but the problem is the user interface. It looks now "Linux" style and it opens allways the current directory. I know I set that up at QDir::currentPath() but I couldnt find another way.

    @
    // create filename
    QStringList fileName;
    // create fileDialog
    QFileDialog fileDialog(this);
    fileDialog.setFileMode(QFileDialog::ExistingFile);
    fileDialog.setNameFilter(tr("JPG Files (.jpg .jpeg);;MPO files (.mpo);;Stereo JPEG (.jps);;3D Videos (*.avi)"));
    fileDialog.setViewMode(QFileDialog::List);
    fileDialog.setDirectory(QDir::currentPath());
    fileDialog.setOption(QFileDialog::DontUseNativeDialog, false);
    // connect signal to change file format
    connect(&fileDialog, SIGNAL(filterSelected(const QString&)), this, SLOT(setFileFormat(const QString&)));
    // open file dialog
    if (fileDialog.exec())
    fileName = fileDialog.selectedFiles();
    // check if a file is selected
    if (!fileName.isEmpty())
    {......
    @

    Now my question, how can I get the Windows style and how can I save the last used directory. Thx so far!

    Stephan



  • Hi,

    regarding your first question, the extension is added to the file name, just look at that.

    Regarding second question: no chance. If you create a QFileDialog object, you create the Qt implementation, The way you use the static functions tells the static function to use the native dialog.



  • I might mix this up with another GUI Framework, but the linux style might occur because you set the option DontUseNativeDialog.

    To get the last used diectory take a look at "QFileDialog::directory()":http://doc.qt.nokia.com/4.7/qfiledialog.html#directory maybe that's what you need.



  • Hi,

    The answer is as easy as possible. I'm used to C# and there you get the information about which filter is selected and I tried it the same way with QT. Sometimes I should start thinking before coding!

    If there is no other chance I just use the getOpenFileName function and search the string for the file ending!

    THX
    Stephan



  • @Daniel
    I tried the option "DontUseNativeDialog" and there is no change

    As i said, i will stick to the funtction and comparing the string.

    THX
    Stephan


Log in to reply