伙伴云客服论坛»论坛 S区 S软件开发 查看内容

0 评论

0 收藏

分享

利用QT实现图片阅读器的示例详解

目录

    1、概述2、代码示例3、演示图片


1、概述

案例:制作一个小的图片阅读器,要求可以显示jpg、jpeg、png、bmp。可以从电脑上拖动图到窗口并显示出来。 
实现步骤:
1.创建一个QWidget
2.在QWidget的构造方法中设置一个QLabel用户显示pixmap
3.在QWidget的protected中定义三个函数,dragEnterEvent(QDragEnterEvent *event)、dropEvent(QDropEvent *event)、resizeEvent(QResizeEvent *event);并在.cpp中实现这三个方法
4.在QWidget的构造函数中参与setAccessDrop(true),设置可向窗口拖拽内容
5.实现dragEnterEvent(拖拽)、dropEvent(拖拽放下)、resizeEvent(窗口重置)
6.实现第5步的三个方法
7.在drawEnterEvent中过滤可拖拽的文件
  1. void watershedwindow::dragEnterEvent(QDragEnterEvent *event){
  2.     QStringList acceptedFileTypes;
  3.     acceptedFileTypes.append("jpg");
  4.     acceptedFileTypes.append("jpeg");
  5.     acceptedFileTypes.append("bmp");
  6.     acceptedFileTypes.append("png");
  7.     if(event->mimeData()->hasUrls()&&event->mimeData()->urls().count()==1){
  8.         QFileInfo file(event->mimeData()->urls().at(0).toLocalFile());
  9.         if(acceptedFileTypes.contains(file.suffix().toLower())){
  10.             event->acceptProposedAction();//标明用户可以在窗口部件上拖放对象
  11.         }
  12.     }
  13. }
复制代码
8.在dropEvent方法中实现文件拖拽放下后的情况,即显示图片
  1. void watershedwindow::dropEvent(QDropEvent *event){
  2.     QFileInfo file(event->mimeData()->urls().at(0).toLocalFile());
  3.     if(pixmap.load(file.absoluteFilePath())){
  4.         label->setPixmap(pixmap.scaled(label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
  5.     }else{
  6.         QMessageBox::critical(this,tr("Error"),tr("The image file count not be read"));
  7.     }
  8. }
复制代码
9.resizeEvent方法中对图像停止重置
  1. void watershedwindow::resizeEvent(QResizeEvent *event){
  2.     Q_UNUSED(event);
  3.     if(!pixmap.isNull()){
  4.         label->setPixmap(pixmap.scaled(label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
  5.     }
  6. }
复制代码
10.完毕
ps:下面是完好代码

2、代码示例
  1. #include "opencv2/opencv.hpp"
  2. #include <QWidget>
  3. #include <QSize>
  4. #include <iostream>
  5. #include <QPixmap>
  6. #include <QDragEnterEvent>
  7. #include <QDropEvent>
  8. #include <QMimeData>
  9. #include <QFileInfo>
  10. #include <QMessageBox>
  11. #include <QResizeEvent>
  12. #include <QStringList>
  13. #include <QLabel>
  14. using namespace cv;
  15. using namespace std;
  16. class watershedwindow : public QWidget
  17. {
  18.     Q_OBJECT
  19. private:
  20.     Mat src,gray,result,distanceImage;
  21.     QPixmap pixmap;
  22.     QLabel *label;
  23. public:
  24.     explicit watershedwindow(QWidget *parent = nullptr);protected:
  25.     /**
  26.      * 拖进事件
  27.      * @brief dragEnterEvent
  28.      * @param event
  29.      */
  30.     void dragEnterEvent(QDragEnterEvent *event);
  31.     /**
  32.      * 拖进放下事件
  33.      * @brief dropEvent
  34.      * @param event
  35.      */
  36.     void dropEvent(QDropEvent *event) ;
  37.     void resizeEvent(QResizeEvent *event);
  38. signals:
  39. };
  40. #include "watershedwindow.h"
  41. watershedwindow::watershedwindow(QWidget *parent) : QWidget(parent)
  42. {
  43.     this->setAcceptDrops(true);//设置允许向窗口拖入图片
  44.     this->setFixedSize(QSize(320,480));
  45.     label = new QLabel(this);
  46.     label->setFixedSize(this->width(),this->height());
  47. }
  48. void watershedwindow::dragEnterEvent(QDragEnterEvent *event){
  49.     QStringList acceptedFileTypes;
  50.     acceptedFileTypes.append("jpg");
  51.     acceptedFileTypes.append("jpeg");
  52.     acceptedFileTypes.append("bmp");
  53.     acceptedFileTypes.append("png");
  54.     if(event->mimeData()->hasUrls()&&event->mimeData()->urls().count()==1){
  55.         QFileInfo file(event->mimeData()->urls().at(0).toLocalFile());
  56.         if(acceptedFileTypes.contains(file.suffix().toLower())){
  57.             event->acceptProposedAction();//标明用户可以在窗口部件上拖放对象
  58.         }
  59.     }
  60. }
  61. void watershedwindow::dropEvent(QDropEvent *event){
  62.     QFileInfo file(event->mimeData()->urls().at(0).toLocalFile());
  63.     if(pixmap.load(file.absoluteFilePath())){
  64.         label->setPixmap(pixmap.scaled(label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
  65.     }else{
  66.         QMessageBox::critical(this,tr("Error"),tr("The image file count not be read"));
  67.     }
  68. }
  69. void watershedwindow::resizeEvent(QResizeEvent *event){
  70.     Q_UNUSED(event);
  71.     if(!pixmap.isNull()){
  72.         label->setPixmap(pixmap.scaled(label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
  73.     }
  74. }
  75. }
复制代码
3、演示图片

利用QT实现图片阅读器的示例详解-1.jpg

利用QT实现图片阅读器的示例详解-2.jpg

到此这篇关于利用QT实现图片阅读器的示例详解的文章就介绍到这了,更多相关QT图片阅读器内容请搜索网站以前的文章或继续阅读下面的相关文章希望大家以后多多支持网站!

回复

举报 使用道具

相关帖子
全部回复
暂无回帖,快来参与回复吧
本版积分规则 高级模式
B Color Image Link Quote Code Smilies

桦艺
注册会员
主题 21
回复 24
粉丝 0
|网站地图
快速回复 返回顶部 返回列表