cugwhp / OOPCPP

Learn C++ Programming Language

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Customize QFileDialog Filters

cugwanghp opened this issue · comments

Customize QFileDialog Filters

imageviewer open image file dialog

下面的代码是打开影像文件对话框的初始化,其中用到了MIME(Multipurpose Internet Mail Extensions)的类型。MIME可以理解为一个常用的文件扩展名词典(XML),按照数据类别组织划分的。如在MIME中就有iamge一类,只可惜对image的扩展名称中没有.img,因而就需要我们自己来添加。

static void initializeImageFileDialog(QFileDialog &dialog, QFileDialog::AcceptMode acceptMode)
{
    static bool firstDialog = true;

    if (firstDialog) {
        firstDialog = false;
        const QStringList picturesLocations = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation);
        dialog.setDirectory(picturesLocations.isEmpty() ? QDir::currentPath() : picturesLocations.last());
    }

    QStringList mimeTypeFilters;
    const QByteArrayList supportedMimeTypes = acceptMode == QFileDialog::AcceptOpen
        ? QImageReader::supportedMimeTypes() : QImageWriter::supportedMimeTypes();
    foreach (const QByteArray &mimeTypeName, supportedMimeTypes)
        mimeTypeFilters.append(mimeTypeName);
    mimeTypeFilters.sort();
    dialog.setMimeTypeFilters(mimeTypeFilters);
    
    // 扩展图像后缀
    QStringList nameFilters = dialog.nameFilters();
    nameFilters << "所有图像文件 (*.img *.pix *.*)";
    dialog.setNameFilters(nameFilters);
    // 
 
   dialog.selectMimeTypeFilter("image/jpeg");
    if (acceptMode == QFileDialog::AcceptSave)
        dialog.setDefaultSuffix("jpg");
}