最近准备自己写一个局域网聊天工具,不过在考虑到头像在数据库存储的时候突然发现不知道怎么存储图片,按什么格式存,存了怎么取
首先,我们应该在数据库中创建一个表来保存用户的的信息,比如我这儿是UserID\UserName\UserNumber\UserPassWord\Image
"create table userTable(UserID INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,UserName CHAR(50),UserNumber CHAR(20),UserPassWord CHAR(20),Image LONGBLOB);"不能断行
如果人品不是太差,table就建好了
然后往表中插入数据:insert into userTable(UserName,UserNumber,UserPassWord,Image) values('Jim','1406542607','shujuku',LOAD_FILE('D:\\images\\chuancai\\baicai.jpg'));
这里的LOAD_FILE('D:\\images\\chuancai\\baicai.jpg')的作用就是往Image字段写入图片,此处用绝对路基,表示你图片所在的位置。这是在windows下,如果是在Linux下,要把目录间隔改成//。这里我们就一句子啊数据库里写入图片了。
那么在Qt里怎么把图片从数据库里面读出来呢?
..... //数据库的连接打开就略去了
query.exec("select * from userTable");
if (query.next())
{
<span style="white-space:pre"> </span>QLabel * picLabel = enw QLabel;
<span style="white-space:pre"> </span>QPixmap photo;
<span style="white-space:pre"> </span>photo.loadFromData(query.value(4).toBtyeArray(),"JPG");//从数据库读出图片为二进制数据,图片格式为JPG,
<span style="white-space:pre"> </span>picLabel->setPixmap(photo);
<span style="white-space:pre"> </span>picLabel->setScaledContents(true);
}
//接下来代码是保存图片到数据库(以二进制形式保存)
//接下来代码是保存图片到数据库
query.prepare("insert into userTable(UserName,UserNumber,UserPassWord,Image) values(?,?,?,?)");
/*imagePath的获得方法可以这样写:
imagePath = QFileDialog::getOpenFileName(this, tr("Open File"),"/home",tr("Images (*.jpg)"));
imagePath.replace("\\","/"); //转换路径格式,imagePath是图片文件的路径,我这里用的是绝对路径
QByteArray data;
QFile* file=new QFile(imagePath); //file为二进制数据文件名
file->open(QIODevice::ReadOnly);
data = file->readAll();
file->close();
QVariant var(data);
//略略略
//略略略
//略略略
query.addBindValue(var);
query.exec();