我正在编写一个应用程序,在该应用程序中,通过拖放,我只想接受音频和视频类型。
这是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/
开头的任何字符串。