Tôi muốn bộ lọc trong QFileDialog khớp với tất cả các loại tệp âm thanh được Phonon hỗ trợ trên nền tảng được đề cập.Bộ lọc QFileDialog từ các loại mime
1 - Tuy nhiên tôi không thể tìm cách trong Qt để sử dụng loại mime trong bộ lọc. Làm thế nào tôi có thể làm điều đó?
2 - Hoặc làm cách nào tôi có thể tìm thấy các phần mở rộng tệp tương ứng cho các mimetypes theo cách thủ công? Giải pháp nên dựa trên Qt, hoặc ít nhất là nền tảng chéo và được hỗ trợ ở mọi nơi Qt.
Lựa chọn một giải pháp là tôi ưa thích, tuy nhiên tuỳ chọn hai sẽ làm mọi việc tốt ..
Sau đây là một mã ngắn mô tả vấn đề của tôi:
#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);
}
Đẹp, đây là một giải pháp tốt. Tuy nhiên có hai nhược điểm xa như tôi có thể thấy. Một nhỏ, là hộp thả xuống bộ lọc trong hộp thoại sẽ không được lấp đầy với các loại tệp được cho phép. Tuy nhiên bạn có thể chỉ cần đặt một số văn bản mô tả ở đó. Giống như trong trường hợp của tôi "tệp âm thanh". Hạn chế nghiêm trọng hơn là bạn không thể sử dụng hộp thoại tệp gốc nữa. Đây là một stopper hiển thị cho tôi và giải pháp cuối cùng (?) Của tôi là gửi một tập tin mime.types với ứng dụng của tôi, nhưng tôi ghét nó! Nếu bạn không quan tâm đến hộp thoại bản địa thì đây là giải pháp tốt hơn theo ý kiến của tôi. Do đó tôi đánh dấu nó như một câu trả lời đúng. – Mathias
Vâng, hộp thoại tệp gốc có lợi ích và vấn đề của chúng. Chúng đáng tin cậy hơn các hộp thoại Qt (đặc biệt là với các chia sẻ mạng và các mục yêu thích), nhưng bạn không thể tùy chỉnh văn bản nút và những thứ khác như bạn có thể làm với các hộp thoại Qt. Bộ lọc thả xuống WRT, bạn nói đúng. Tôi tò mò nếu các tập tin được lọc dựa trên phần mở rộng sau khi một mô hình proxy được đưa ra, nhưng chưa thử nghiệm để biết chắc chắn. –