是否存在所有音频和视频的MIME类型,如" audio / *"和"视频/ *"?

时间:2016-07-21 19:36:57

标签: c++ audio video qt5 mime-types

我正在编写一个应用程序,在这个应用程序中,我只想接受音频和视频类型。

这是Qt5中用于放置小部件的代码:

void DragDropFrame::dragEnterEvent(QDragEnterEvent* evt)
{
    if (frame_type == FRAME_TYPE::DROPPABLE)
    {
        if (evt->mimeData()->hasFormat("audio/*"))
        {
            evt->acceptProposedAction();
        }
        else
            evt->ignore();
    }
    else
        evt->ignore();
}

然而"音频/ *"不起作用。小部件不接受任何文件。我是否必须" if-else"所有可能的音频和视频MIME类型还是有另一种更快的解决方案吗?

2 个答案:

答案 0 :(得分:1)

QMimeData::hasFormat不会处理任何类型的通配符。它只是检查您指定的mimetype是否在支持的格式列表中按原样存在(参见the implementation)。

您需要获取受支持的formats()列表,并搜索以audio/video/开头的任何字符串。

答案 1 :(得分:1)

不,没有像这样的通用MIME类型。

evt将告诉您它所拥有的特定MIME类型。您可以进行子串/模式匹配,以查看是否有任何类型匹配您要查找的内容,例如:

void DragDropFrame::dragEnterEvent(QDragEnterEvent* evt)
{
    if (frame_type == FRAME_TYPE::DROPPABLE)
    {
        QStringList formats = evt->mimeData()->formats();
        if (!formats.filter("audio/").empty() ||
            !formats.filter("video/").empty())
        {
            evt->acceptProposedAction();
            return;
        }
    }

    evt->ignore();
}

可替换地:

void DragDropFrame::dragEnterEvent(QDragEnterEvent* evt)
{
    if (frame_type == FRAME_TYPE::DROPPABLE)
    {
        QRegExp regex("\\b(audio|video)/*", Qt::CaseInsensitive, QRegExp::Wildcard);
        if (!evt->mimeData()->formats().filter(regex).empty())
        {
            evt->acceptProposedAction();
            return;
        }
    }

    evt->ignore();
}