FileOpen Dialog mit gescheiten Fehlermeldungen

Code-Schnippsel, oder Tipps und Tricks, die einem beim Programmieren mit Qt helfen können.
Antworten
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

FileOpen Dialog mit gescheiten Fehlermeldungen

Beitrag von kater »

Aussagekräftige Fehlermeldungen finde ich eine starke Sache die auf keinen Fall fehlen sollte.
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));

    }
}
Antworten