отображение изображения из ошибки sqlite - PullRequest
1 голос
/ 02 октября 2011

Я сохранил изображение в sqlite, и я пытаюсь получить его и отобразить в QLabel, используя этот код.

connect(ui.tableView->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
                this, SLOT(getImage(QModelIndex,QModelIndex)));


void smith::getImage()
{
    .......
    QModelIndex index = ui.tableView->currentIndex();
    QString sqlQuery = QString("SELECT image FROM %1 WHERE id=:id").arg(tableName);
    query.prepare(sqlQuery);
    QSqlRecord recordz = tableModel->record(index.row());
    query.bindValue(":id", recordz.value("id").toInt());
    query.exec();
    tableModel->select();

    QByteArray array = query.value(0).toByteArray();
    QBuffer buffer(&array);
    buffer.open( QIODevice::ReadOnly );

    QImageReader reader(&buffer, "PNG");
    QImage image = reader.read();

if( image.isNull() )
{
    QMessageBox::about(this, tr("Image Is Null"),
                       tr("<h2>Image Error</h2>"
                          "<p>Copyright &copy; 2011."
                          "<p>Message Box To Check For  "
                          " Errors "
                          ));
}
    ui.imageLabel->setPixmap( QPixmap::fromImage(image));

}

Проект компилируется без ошибок, но изображение не отображается.

1 Ответ

2 голосов
/ 02 октября 2011

Я бы предложил добавить некоторую проверку ошибок в ваш код, чтобы сузить место возникновения ошибки.

Например, документация для QImageReader::read() говорит, что если изображениене может быть прочитано, результирующее изображение имеет значение null, и оно говорит вам, как выяснить, в чем заключалась ошибка.

Итак, после вашего звонка на reader.read(), проверьте image.isNull().

И ранее, проверьте array.size(), чтобы убедиться, что вы действительно получили значение из базы данных.

И проверьте результат, возвращенный buffer.open( QIODevice::ReadOnly ) - в документах говорится, что он вернет false, есливызов не удался.

...