2016-07-21 13 views
1

Я пишу приложение, в котором при перетаскивании я хочу принимать только аудио и видео типы.Есть ли такая вещь, как тип MIME для всех аудио и видео, таких как «audio/*» и «video/*»?

Это код в 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 или есть еще одно более быстрое решение?

ответ

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(); 
} 
+0

спасибо Реми! Я даже не думал о регулярном выражении –

1

QMimeData::hasFormat не обрабатывает никаких подстановочных знаков. Он просто проверяет, указан ли указанный вами тип mimet, как есть в списке поддерживаемых форматов (см. the implementation).

Вам необходимо получить список поддерживаемых formats() и найти его для любой строки, начиная с audio/ или video/.

 Смежные вопросы

  • Нет связанных вопросов^_^