QT开发中文网

qfiledialog以mimetype为过滤器,区分为视频文件和音频文件

对于QFileDialog,它默认是根据文件扩展名来进行过滤的,并不直接支持基于MimeType的过滤器。但我们可以通过自定义过滤器来实现按照MimeType区分视频文件和音频文件。

以下是一个示例代码,演示了如何使用QMimeDatabase和自定义过滤器来实现QFileDialog根据MimeType区分视频文件和音频文件:

#include <QApplication>
#include <QFileDialog>
#include <QDebug>
#include <QMimeDatabase>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QStringList mimeTypes;
    mimeTypes << "video/*" << "audio/*";

    QString filePath = QFileDialog::getOpenFileName(nullptr, "选择文件", "", "视频文件 (*.*) ;; 音频文件 (*.*)", nullptr, QFileDialog::ReadOnly | QFileDialog::DontUseNativeDialog);
    
    if (!filePath.isEmpty()) {
        QFile file(filePath);

        if (file.open(QIODevice::ReadOnly)) {
            QByteArray fileContent = file.readAll();

            QMimeDatabase mimeDb;
            QMimeType mimeType = mimeDb.mimeTypeForData(fileContent);

            if (mimeType.isValid()) {
                QString type = mimeType.name();
                
                if (type.startsWith("video")) {
                    qDebug() << "选中的是视频文件";
                    // 执行视频相关操作
                } else if (type.startsWith("audio")) {
                    qDebug() << "选中的是音频文件";
                    // 执行音频相关操作
                } else {
                    qDebug() << "选中的是其他类型的文件";
                }
            } else {
                qDebug() << "无法确定该文件的MimeType";
            }

            file.close();
        } else {
            qDebug() << "无法打开所选文件";
        }
    } else {
        qDebug() << "未选择任何文件";
    }

    return app.exec();
}

在这个示例中,我们首先通过设置过滤器字符串来包含所有类型的文件:”视频文件 (.) ;; 音频文件 (.)“。

然后,我们使用QMimeDatabase来获取文件内容的MimeType,并根据MimeType进行区分。如果MimeType的名称以”video”开头,则说明选中的是视频文件;如果以”audio”开头,则说明选中的是音频文件;否则,说明选中的是其他类型的文件。

根据实际需求,在相应分支内执行相关操作即可。

请注意,由于QFileDialog并不直接支持基于MimeType的过滤器,因此我们需要将对话框模式设置为QFileDialog::DontUseNativeDialog,以确保自定义过滤器生效。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=7702

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?