12-设置和清除照片
11.2.6 设置和清除照片
employee数据表的Photo字段是BLOB字段,用于存储图片文件。Photo字段内容的显示已经在自定义槽函数on_currentRowChanged()里实现了,就是在当前记录变化时提取Photo字段的内容,并显示为dbLabPhoto的pixmap。
actPhoto和actPhotoClear是设置照片和清除照片的两个Action,与工具栏上的“设置照片”和“清除照片”按钮关联。actPhoto的槽函数代码如下:
void MainWindow::on_actPhoto_triggered()
{//设置照片
QString aFile=QFileDialog::getOpenFileName(this,"选择图片", "", "照片(*.jpg)");
if (aFile.isEmpty())
return;
QByteArray data;
QFile* file=new QFile(aFile);
file->open(QIODevice::ReadOnly);
data = file->readAll();
file->close();
int curRecNo=theSelection->currentIndex().row();
QSqlRecord curRec=tabModel->record(curRecNo); //获取当前记录
curRec.setValue("Photo",data); //设置字段数据
tabModel->setRecord(curRecNo,curRec);
QPixmap pic;
pic.load(aFile); //在界面上显示
ui->dbLabPhoto->setPixmap(pic.scaledToWidth(ui->dbLabPhoto->width()));
}
代码功能是用文件对话框选择一个图片文件,读取文件内容到QByteArray类型的变量data里,获取当前记录到变量curRec后,用QSqlRecord的setValue()函数为Photo字段设置数据为data,然后用setRecord()函数更新当前记录。
curRec.setValue("Photo",data); //设置字段数据
tabModel->setRecord(curRecNo,curRec);
这里的更新只是更新到数据模型,并没有更新到数据库。
actPhotoClear用于清除照片,其槽函数实现代码如下:
void MainWindow::on_actPhotoClear_triggered()
{
int curRecNo=theSelection->currentIndex().row();
QSqlRecord curRec=tabModel->record(curRecNo); //获取当前记录
curRec.setNull("Photo");//设置为空值
tabModel->setRecord(curRecNo,curRec);
ui->dbLabPhoto->clear();
}
获取当前记录到变量curRec后,调用setNull()函数将Photo字段设置为NULL,就是清除了字段的内容,然后更新记录到数据模型。