在Qt中如何加载图像以及保存图像到数据库中
先前写过一个在PHP中往数据库中保存图像以及如何读取显示出来:
http://www.qtcn.org/blog/blog.php?do-showone-itemid-479-type-blog.html现在遇到了在Qt中把图像保存到数据库中(以BLOB类型保存)的问题,这里总结一下,供各位朋友参考
基本的思想和前面的使用PHP保存头像是一样的,这里以例子解说
1、加载一个头像到界面上显示出来(labelZhaoPian的大小是80x96)
显示头像,这里用QLabel来显示,代码如下:
extern QString g_strCurrentDir; QString strImage = QFileDialog::getOpenFileName(this, "请选择照片文件", g_strCurrentDir, "图像文件 (*.png *.jpg *.bmp *.gif)"); if (strImage.isNull()) { return; } g_strCurrentDir = QDir(strImage).absolutePath(); labelZhaoPian->setPixmap(QPixmap(strImage).scaled(labelZhaoPian->size()));
|
|
相应地,清除头像的代码就很简单了
labelZhaoPian->setPixmap(QPixmap()); labelZhaoPian->setText("照\n\n片");
|
|
2、保存图像到数据库中,以PNG格式
if (labelZhaoPian->pixmap()->isNull() == false) { QByteArray bytes; QBuffer buffer(&bytes); buffer.open(QIODevice::WriteOnly); labelZhaoPian->pixmap()->save(&buffer, "PNG"); QString out; for(int n = 0; n < (int)bytes.size(); ++n) { QString str; str.sprintf("%02x", (uchar)bytes[n]); out.append(str); } query.exec(QString("UPDATE profile SET photo = 0x%1 WHERE ID = %2").arg(out).arg(iProfileId)); }
|
|
3、从数据库中读取出图像来,并显示
QSqlQuery q("SELECT photo FROM profile WHERE iprofileid = 1"); if (q.next()) { if (q.isNull(0) == false) { QPixmap photo; photo.loadFromData(q.value(0).toByteArray(), "PNG"); labelZhaoPian->setPixmap(photo); } }
|
|
-
guest 于 2007-09-15 00:07
- XChinux你好
我用的代码片段如下:
QFile* file=new QFile(fileName); //fileName为二进制数据文件名
file->open(QIODevice::ReadOnly);
QSqlQuery query;
query.prepare("INSERT INTO myTestDB (Id, BlobData) "
"VALUES (?, ?)");
QString tmp=nameEdit->text(); //nameEdit是自己定义的QLineEdit输入框名字
QVariant name(tmp);
query.addBindValue(name);
QByteArray Data;
Data=file->readAll();
file->close();
query.addBindValue(Data);
query.exec();
这样把图像保存到数据库里,代码也还算清晰。
不过,现在有一个问题:
我是用的256M内存的赛阳2.4GHz的Windows2000系统下的Access做的测试,
把10M的mp3音频文件保存到数据库用时在22秒左右,内存占用50M;
当我试图将100M的视频文件保存到数据库时,系统无响应!!!
我尝试将100M文件分割成10M的数据块逐块保存,没有发现合适的append()函数
不知道您是否能提供一点在Qt下将100M以上的大文件保存到数据库的建议呢?
谢谢。
-
guest 于 2007-09-15 09:45
- 这个是与数据库有关系的吧,看数据库的bin类型字段最大存储多少的数据。
引自:http://www.qtcn.org/blog/article.php?itemid-627-type-blog.html
阅读(4561) | 评论(0) | 转发(0) |