我在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 © 2011."
"<p>Message Box To Check For "
" Errors "
));
}
ui.imageLabel->setPixmap( QPixmap::fromImage(image));
}
项目编译没有任何错误,但图像不会显示。
答案 0 :(得分:2)
我建议在代码中添加一些错误检查,以缩小错误发生的位置。
例如,QImageReader::read()
的文档说如果无法读取图像,结果图像为空,它会告诉您如何找出错误是什么。
在致电reader.read()
后,请检查image.isNull()
。
早些时候,请检查array.size()
以确保您确实从数据库中获得了值。
并检查buffer.open( QIODevice::ReadOnly )
返回的结果 - 文档说如果通话失败,它将返回false
。