基础的基于QT的图像查看程序

代码来自《QT5.9c++开发指南》,因为实现了图片的遍历显示,对于将来编写ImageShop一类的图像程序来说将非常有用(这个程序目前存在一定问题,在研究过程中进行解决)

508489-20190303192535711-1459909168.jpg
一、基本功能
基于"混合UI"界面设计,以及QTreeWidget、QDockWidget使用(通过将一个QTreeWidget组件防止在QDockWidget区域上,并设置其可以在主窗体的左边或右边停靠,也可以浮动),同时实现了目录及文件的查看、缩放等操作。
1、界面布局设计
508489-20190303192536222-1933045597.png
可以看出QT中布局的良好层次结构,比如前面所说的在DockWidget上防止QTreeWidget,并且使用水平布局使treeWidget填充停靠区。
在工作区右侧是一个QScrollArea,通过在其中放置一个QLabel组件,并且利用QLabel的pixmap属性显示图片,这样实现了滚动。
在主窗口的构造函数中,将ScroolArea组件设置为中心组件之后,便自动出现分割条
508489-20190303192536618-1943877355.png
508489-20190303192536960-1464610629.png
【而这些功能,如果在MFC中实现的话,都是要大费脑筋的,这里QT的却将很多工作简化了 508489-20190303192537371-1300777984.png
2、QDockWidget中组件属性设置
508489-20190303192537979-1205507046.png
在这个下面,有很多详细的设置,可以使用。
3、QTreeWidget组件设置
508489-20190303192538385-1195239329.png
双击后可以设置,用于设计目录树的列
508489-20190303192538733-985148077.png
并且全部是非常新的操作。【所以MFC的方式基本已经过时,从这些细节都是可以看出来原因】
4、Action设计
508489-20190303192539199-760823134.png
所有的操作,包括快捷键和相关设计,都在这里。可以看出,非常细致,而且符合我们图像处理程序的基本要求。
二、基于QLabel和QPixmap显示图片
我们最终处理的图片是要显示出来,所以肯定是需要和控件打交道
void MainWindow:: displayImage( QTreeWidgetItem * item)
{
//显示图片,节点item存储的图片文件名
QString filename= item-> data( colItem, Qt:: UserRole). toString(); //获取节点data里存的文件名
LabFileName-> setText( filename);
curPixmap. load( filename); //从文件载入图片
on_actZoomFitH_triggered(); //自动适应高度显示

ui-> actZoomFitH-> setEnabled( true);
ui-> actZoomFitW-> setEnabled( true);
ui-> actZoomIn-> setEnabled( true);
ui-> actZoomOut-> setEnabled( true);
ui-> actZoomRealSize-> setEnabled( true);
}
其中QTreeWidgetItem::data()通过返回节点存储的数据,也就是setData()设置的数据。因为前面已经将文件名带路径全部存储为节点数据,所以这里一行就可以获得全名。
curPixmap一个load就将图片导入。
最后,调用 on_actZoomFitH_triggered显示图片

void MainWindow:: on_actZoomOut_triggered()
{ //缩小显示
pixRatio= pixRatio* 0.8; //在当前比例基础上乘以0.8
int w= pixRatio* curPixmap. width(); // 显示宽度
int h= pixRatio* curPixmap. height(); //显示高度
QPixmap pix= curPixmap. scaled( w, h); //图片缩放到指定高度和宽度,保持长宽比例
ui-> LabPicture-> setPixmap( pix);
}

void MainWindow:: on_actZoomIn_triggered()
{ //放大显示
pixRatio= pixRatio* 1.2; //在当前比例基础上乘以0.8
int w= pixRatio* curPixmap. width(); // 显示宽度
int h= pixRatio* curPixmap. height(); //显示高度
QPixmap pix= curPixmap. scaled( w, h); //图片缩放到指定高度和宽度,保持长宽比例
ui-> LabPicture-> setPixmap( pix);
}

void MainWindow:: on_actZoomFitW_triggered()
{ //适应宽度显示
int w= ui-> scrollArea-> width()- 20; //得到scrollArea的高度
int realw= curPixmap. width(); //原始图片的实际宽度
pixRatio= float( w)/ realw; //当前显示比例,必须转换为浮点数
QPixmap pix= curPixmap. scaledToWidth( w- 30);
ui-> LabPicture-> setPixmap( pix);
}

void MainWindow:: on_actZoomFitH_triggered()
{ //适应高度显示图片
int H= ui-> scrollArea-> height(); //得到scrollArea的高度
int realH= curPixmap. height(); //原始图片的实际高度
pixRatio= float( H)/ realH; //当前显示比例,必须转换为浮点数
QPixmap pix= curPixmap. scaledToHeight( H- 30); //图片缩放到指定高度
ui-> LabPicture-> setPixmap( pix); //设置Label的PixMap
}

void MainWindow:: on_actZoomRealSize_triggered()
{ //实际大小显示
pixRatio= 1; //恢复显示比例为1
ui-> LabPicture-> setPixmap( curPixmap);
}
特别是这里的几个放大缩小,都是非常有效的—关键是比MFC简单许多。
三、QTreeWidget操作
其实应该是有简单的做法,那就是只能给添加单个图片、或者是整个目录,这两种情况。
void MainWindow:: on_actAddFolder_triggered()
{ // 选择一个文件夹,作为当前节点的子节点加入
     QString dir= QFileDialog:: getExistingDirectory(); //选择目录
     if (! dir. isEmpty()) //选择目录名称不为空
    {
          QTreeWidgetItem * parItem = ui -> treeFiles -> currentItem (); //当前节点
          addFolderItem ( parItem , dir ); //在父节点下面添加一个组节点
    }
}
之需要获得根结点,然后全部添加进去就可以。这里肯定还需要一个遍历图片的操作。我想办法进行实现。
而且这里我所需要的是一个全目录文件的显示。这个放到下一步解决。





转载于:https://www.cnblogs.com/jsxyhelu/p/10467029.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 目前,在GitHub上可以找到许多基于图像识别的Qt系统的源码。这些源码主要分为两大类:一类是基于已有的图像识别算法进行二次开发的系统,另一类是完全自主研发的系统。 对于第一类,很多开发者通过使用Qt框架封装和优化开源图像识别算法,实现了一系列图像识别应用。这些源码提供了诸如人脸识别、物体检测、手势识别等功能的实现。这些系统独立于底层图像识别算法库,通过Qt的强大功能和良好的跨平台性能,为系统提供了友好的用户界面和良好的交互体验。 对于第二类,一些开发者基于Qt自主研发了一整套图像识别系统。这些系统往往包含了图像采集、特征提取、模式匹配等多个流程,并采用了很多成熟的图像算法和深度学习模型。这些源码通常是商业级别的系统,可以应用于各种场景,如智能安防、自动驾驶、智能机器人等。 无论是哪一类的源码,都具有一定的参考和学习价值。通过研究这些源码,可以了解到图像识别技术的应用和实现方式,同时也可以借鉴其中的优秀设计和实现思路。对于想要进行图像识别系统开发的开发者来说,GitHub上的这些源码是宝贵的资源。 总结来说,Qt基于图像识别系统的源码在GitHub上有很多可供参考的项目。开发者可以通过研究这些源码,了解图像识别技术的应用和实现方式,同时也可以借鉴其中的优秀设计和实现思路。 ### 回答2: 在GitHub上可以找到许多基于图像识别系统的Qt源代码项目。Qt是一个功能强大且跨平台的应用程序开发框架,它提供了丰富的图形和用户界面库,非常适合用于开发图像识别相关的应用程序。 这些基于图像识别系统的Qt源码项目通常包含了实现基本图像处理和计算机视觉算法的代码,以及与用户界面交互的界面设计。例如,有些项目使用Qt图像处理库实现了图像预处理操作,比如灰度化、二值化、滤波等;同时,它们还包括了计算机视觉算法,比如特征提取、目标检测、图像匹配等。 这些项目还常常结合了Qt的图形界面模块,提供了友好的用户界面。通过这些界面,用户可以输入图像,设置识别参数,预览和保存处理后的图像,以及查看和分析识别结果。同时,一些项目还提供了图像标注和训练模块,以便用户可以通过标注和训练自定义模型,提高识别系统的性能。 总的来说,GitHub上的这些基于图像识别系统的Qt源码项目,提供了一种方便快捷的方式,让开发者能够基于这些项目进行二次开发,快速搭建自己的图像识别应用程序。通过使用Qt这个强大的应用程序开发框架,我们可以轻松实现图像处理和计算机视觉算法,并提供友好的用户界面,让用户能够方便地使用和操作识别系统,达到更好的用户体验和效果。 ### 回答3: 有关基于图像识别系统的Qt源码,可以在GitHub上找到很多开源项目。 其中一些受欢迎的图像识别库包括OpenCV、TensorFlow和Caffe等。这些库提供了用于图像处理和机器学习的丰富函数和算法,可以帮助开发者实现图像识别系统。 在GitHub上,你可以搜索这些图像识别库的关键词,然后根据自己的需求选择适合的项目。选择一个活跃的项目可以确保源码的稳定性和更新性。一般来说,活跃的项目会有较多的贡献者和更新日志。 一旦找到符合需求的项目,你就可以从GitHub上克隆源码到本地进行使用和修改。Qt作为一个跨平台的开发框架,可以与这些图像识别库结合使用,为图像识别系统提供用户界面和图像展示功能。 在使用GitHub上的源码时,注意遵守开源协议,遵循项目的授权要求。如果你对项目有改进或者增加功能的想法,也可以向原作者提交贡献,使得项目不断进步发展。 总而言之,通过在GitHub上搜索图像识别相关的开源项目,可以找到满足需求的Qt源码,并进行二次开发或者直接使用,提高开发效率和图像识别系统的质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值