是否有适用于所有音频和视频(如 "audio/*" 和"video/*")的 MIME 类型?



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

这是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();
}

然而,"audio/*"不起作用。该小部件不接受任何文件。我必须"如果其他"所有可能的音频和视频MIME类型,还是有其他更快的解决方案?

不,没有像这样的通用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();
}

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

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

相关内容

  • 没有找到相关文章