Mat*_*ias 5 qt file-extension phonon qfiledialog mime-types
我希望QFileDialog中的过滤器匹配所讨论的平台上Phonon支持的所有音频文件类型.
1 - 但是我无法在Qt中找到在过滤器中使用mime类型的方法.我怎样才能做到这一点?
2 - 或者我如何手动找到mimetypes的相应文件扩展名?解决方案应该是基于Qt的,或者至少是跨平台的,并且在任何地方都支持Qt.
选项一是我的首选解决方案,但选项二也可以.
以下是描述我的问题的简短代码:
#include <QApplication>
#include <QFileDialog>
#include <QStringList>
#include <phonon/backendcapabilities.h>
QStringList mime_to_exts(QString mime)
{
// WHAT TO REALLY DO ??
// NEEDLESS TO SAY; THIS IS WRONG...
return QStringList(mime.split("/").back().split('-').back());
}
int main(int argc, char **argv)
{
QApplication app(argc, argv);
app.setApplicationName("phononext");
QStringList p_audio_exts;
QStringList p_mime_types = Phonon::BackendCapabilities::availableMimeTypes();
for(QStringList::iterator i = p_mime_types.begin(), ie = p_mime_types.end(); i != ie; i++)
{
if((*i).startsWith("audio"))
p_audio_exts << mime_to_exts(*i);
}
QString filter = QString("All Files(*)");
if(!p_audio_exts.isEmpty())
{
QString p_audio_filter = QString("Audio Files (*.%1)").arg(p_audio_exts.join(" *."));
filter = QString("%1;;%2").arg(p_audio_filter).arg(filter);
}
QFileDialog::getOpenFileName(NULL, "Open Audio File", QString(), filter);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用 过滤 mime 类型QFileDialog::setProxyModel。您可能想要子类化QSortFilterProxyModel并覆盖,filterAcceptsRow以便它仅在文件具有适当的 mime 类型时才接受。希望当与识别文件的 mime 类型的简单方法结合时,这将成为一个很好的解决方案。
| 归档时间: |
|
| 查看次数: |
1661 次 |
| 最近记录: |