0

ファイル名とファイルダイアログを開くボタンを表示する行編集を含む単純なウィジェットを作成しようとしています。そして今、ファイル拡張子が有効かどうかを確認したいと思います。この場合、jpg、png、または bmp で終わる画像ファイルです。QFileInfo と QList でこれを解決しました。このコードは btn_clicked スロットにあります。

QString filename = QFileDialog::getOpenFileName(this, tr("Select an image File", "", tr("Image Files (*.bmp *.jpg *.png);; All Files(*)"));
QList<QString> ext_list;
ext_list<<"bmp"<<"jpg"<<"png";
QFileInfo fi(filename);
QString ext = fi.suffix();
if (ext_list.contains(ext)){
   // lineedit->setText(filename);
}
else {
QMessageBox msgBox;
msgBox.critical(0, "Error", "You must select a valid image file");

それは機能しますが、目標を達成するためのよりシンプルでエレガントな方法はありますか? ありがとうございます。

4

1 に答える 1

0

You might be interested by the setNameFilters function : http://doc.qt.io/qt-5/qfiledialog.html#setNameFilters

Update

If you want to filter images without naming each extensions, you should use QMimeDatabase. This will allow you to define your filter for the QFileDialog and then get a list of extensions to check.

たとえば、jpeg と png の場合:

QStringList mimeTypeFilters;
mimeTypeFilters << "image/jpeg" << "image/png";

QFileDialog fd;
fd.setFileMode(QFileDialog::ExistingFile);
fd.setMimeTypeFilters(mimeTypeFilters);
fd.exec();

QString filename = fd.selectedFiles().count() == 1 ? fd.selectedFiles().at(0) : "";

QMimeDatabase mimedb;
if(!mimeTypeFilters.contains(mimedb.mimeTypeForFile(filename).name()))
{
    // something is wrong here !
}
于 2015-05-06T10:09:45.007 に答える