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

28-QLabel和QPixmap显示图片

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.7.4 QLabel和QPixmap显示图片

1.显示节点关联的图片

在目录树上单击一个节点后,如果其类型为图片节点(itImageItem),就会调用displayImage (QTreeWidgetItem *item)函数显示节点的图片,当前节点作为函数的传递参数。displayImage()函数的代码如下:

void MainWindow::displayImage(QTreeWidgetItem *item)
{//显示图片,节点item存储了图片文件名
   QString filename=item->data(colItem,Qt::UserRole).toString();//文件名
   LabFileName->setText(filename); 
   curPixmap.load(filename); 
   on_actZoomFitH_triggered(); //自动适应高度显示
}

QTreeWidgetItem::data()返回节点存储的数据,也就是用setData()设置的数据。前面在添加图片节点时,将文件名的带路径全名存储为节点的数据,这里的第一行语句就可以获得节点存储的图片文件全名。

curPixmap是在MainWindow 中定义的一个QPixmap类型的变量,用于操作图片。QPixmap:: load(QString &fileName)直接将一个图片文件载入。

最后调用函数on_actZoomFitH_triggered()显示图片,这是actZoomFitH的槽函数,以适应高度的形式显示图片。

2.图片缩放与显示

有几个Action实现图片的缩放显示,包括适合宽度、适合高度、放大、缩小、实际大小,部分槽函数代码如下:

void MainWindow::on_actZoomFitH_triggered()
{//适应高度显示图片
   int H=ui->scrollArea->height();
   int realH=curPixmap.height(); 
   pixRatio=float(H)/realH;  //当前显示比例,必须转换为浮点数
   QPixmap pix=curPixmap.scaledToHeight(H-30); //图片缩放到指定高度
   ui->LabPicture->setPixmap(pix); 
}
void MainWindow::on_actZoomIn_triggered()
{//放大显示
   pixRatio=pixRatio*1.2;
   int w=pixRatio*curPixmap.width();
   int h=pixRatio*curPixmap.height();
   QPixmap pix=curPixmap.scaled(w,h);
   ui->LabPicture->setPixmap(pix);
}
void MainWindow::on_actZoomRealSize_triggered()
{ //实际大小显示
   pixRatio=1; 
   ui->LabPicture->setPixmap(curPixmap);
}

QPixmap存储图片数据,可以缩放图片,有以下几个函数。

  • QPixmap scaledToHeight(int height):返回一个缩放后的图片的副本,图片缩放到一个高度height。
  • QPixmap scaledToWidth(int width):返回一个缩放后的图片的副本,图片缩放到一个宽度width。
  • QPixmap scaled(int width, int height):返回一个缩放后的图片的副本,图片缩放到宽度width和高度height,缺省为不保持比例。

变量curPixmap保存了图片的原始副本,要缩放只需调用curPixmap的相应函数,返回缩放后的图片副本。

在界面上的一个标签LabPicture上显示图片,使用了QLabel的setPixmap(const QPixmap &)函数。