Also hier mein FileOpen Dialog der den Filter auf alle unterstütze Bildformate legt, im Falle eines Fehlers gesprächig ist und mein erstes recht brauchbares Qt Snippet ist.
Code: Alles auswählen
// das ist ne slots funktion
void MainWindow::open() {
// den Filter zusammenbauen
// alle Bildformate die Qt inklusive Plugins unerstuetzt in das Filter aufnehmen
QString filter = "Image Files (";
for (int i = 0; i < QImageReader::supportedImageFormats().size(); ++i)
{
filter += "*.";
filter += QImageReader::supportedImageFormats().at(i).data();
filter += " ";
}
filter += ")";
filter += " ;; All Files (*.*)";
// qDebug() << filter;
// neuen FileDialog erstellen
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open File"), QDir::currentPath(),
filter
);
// wenn ein gueltiger Dateiname gewaehlt wurde
if (!fileName.isEmpty())
{
// oeffne das Bild mit QImageReader. Der erlaubt eine bessere
// Fehlerbehandlung als QImage
QImageReader reader(fileName);
// versuch das Bild zu lesen
QImage image2 = reader.read();
// Ups, Fehler. Na dann mal schauen welcher es war
if (image2.isNull())
{
// Fehlermeldung zusammenbauen
QString errorString;
switch(reader.error()) {
case 1: errorString = "QImageReader was used with a file name, but not file was found with that name. This can also happen if the file name contained no extension, and the file with the correct extension is not supported by Qt.";
break;
case 2: errorString = "QImageReader encountered a device error when reading the image. You can consult your particular device for more details on what went wrong.";
break;
case 3: errorString = "Qt does not support the requested image format.\n";
errorString += "Supportet Formats: \n";
for (int i = 0; i < reader.supportedImageFormats().size(); ++i)
{
errorString += reader.supportedImageFormats().at(i).data();
errorString += " ";
}
break;
case 4: errorString = "The image data was invalid, and QImageReader was unable to read an image from it. The can happen if the image file is damaged.";
break;
default: errorString = "An unknown error occurred. If you get this value after calling read(), it is most likely caused by a bug in QImageReader.";
}
// Fehlermeldung ausgeben
QMessageBox::critical(this, tr("Image Viewer"),tr("Cannot load %1\n%2").arg(fileName).arg(errorString) );
}
// Wenn alles gut lief, das Bild laden (myImage1 ist ein QLabel)
else
ui->myImage1->setPixmap(QPixmap::fromImage(image2));
}
}