当前位置:嗨网首页>书籍在线阅读

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,就是清除了字段的内容,然后更新记录到数据模型。