Regular Expression Filter for QFileDialog

后端 未结 2 1403
挽巷
挽巷 2020-12-20 10:09

I would like to display a file open dialog that filters on a particular pattern, for example *.000 to *.999.

QFileDialog::getOpenFile

相关标签:
2条回答
  • 2020-12-20 10:37

    ariwez pointed me into the right direction. The main thing to watch out for is to call dialog.setOption(QFileDialog::DontUseNativeDialog) before dialog.setProxyModel.

    The proxy model is:

    class FileFilterProxyModel : public QSortFilterProxyModel
    {
    protected:
        virtual bool filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const
        {
            QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
            QFileSystemModel* fileModel = qobject_cast<QFileSystemModel*>(sourceModel());
    
            // I don't want to apply the filter on directories.
            if (fileModel == nullptr || fileModel->isDir(index0))
                return true;
    
            auto fn = fileModel->fileName(index0);
    
            QRegExp rx(".*\\.\\d\\d\\d");
            return rx.exactMatch(fn);
        }
    };
    

    The file dialog is created as follows:

    QFileDialog dialog;
    
    // Call setOption before setProxyModel.
    dialog.setOption(QFileDialog::DontUseNativeDialog);
    dialog.setProxyModel(new FileFilterProxyModel);
    dialog.exec();
    
    0 讨论(0)
  • 2020-12-20 10:40

    It can be done by adding proxy model to QFileDialog. It is explained here: Filtering in QFileDialog

    0 讨论(0)
提交回复
热议问题