这篇文章主要介绍了如何利用QT实现图片浏览器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何利用QT实现图片浏览器文章都会有所收获,下面我们一起来看看吧。
1、概述
案例:制作一个小的图片浏览器,要求可以显示jpg、jpeg、png、bmp。可以从电脑上拖动图到窗口并显示出来。
实现步骤:
创建一个QWidget
在QWidget的构造方法中设置一个QLabel用户显示pixmap
在QWidget的protected中定义三个函数,dragEnterEvent(QDragEnterEvent *event)、dropEvent(QDropEvent *event)、resizeEvent(QResizeEvent *event);并在.cpp中实现这三个方法
在QWidget的构造函数中加入setAccessDrop(true),设置可向窗口拖拽内容
实现dragEnterEvent(拖拽)、dropEvent(拖拽放下)、resizeEvent(窗口重置)
实现第5步的三个方法
在drawEnterEvent中过滤可拖拽的文件
void watershedwindow::dragEnterEvent(QDragEnterEvent *event){ QStringList acceptedFileTypes; acceptedFileTypes.append("jpg"); acceptedFileTypes.append("jpeg"); acceptedFileTypes.append("bmp"); acceptedFileTypes.append("png"); if(event->mimeData()->hasUrls()&&event->mimeData()->urls().count()==1){ QFileInfo file(event->mimeData()->urls().at(0).toLocalFile()); if(acceptedFileTypes.contains(file.suffix().toLower())){ event->acceptProposedAction();//表明用户可以在窗口部件上拖放对象 } }}
在dropEvent方法中实现文件拖拽放下后的情况,即显示图片
void watershedwindow::dropEvent(QDropEvent *event){ QFileInfo file(event->mimeData()->urls().at(0).toLocalFile()); if(pixmap.load(file.absoluteFilePath())){ label->setPixmap(pixmap.scaled(label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation)); }else{ QMessageBox::critical(this,tr("Error"),tr("The image file count not be read")); }}
resizeEvent方法中对图像进行重置
void watershedwindow::resizeEvent(QResizeEvent *event){ Q_UNUSED(event); if(!pixmap.isNull()){ label->setPixmap(pixmap.scaled(label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation)); } }
2、代码示例
#include "opencv2/opencv.hpp"#include <QWidget>#include <QSize>#include <iostream>#include <QPixmap>#include <QDragEnterEvent>#include <QDropEvent>#include <QMimeData>#include <QFileInfo>#include <QMessageBox>#include <QResizeEvent>#include <QStringList>#include <QLabel> using namespace cv;using namespace std; class watershedwindow : public QWidget{ Q_OBJECTprivate: Mat src,gray,result,distanceImage; QPixmap pixmap; QLabel *label;public: explicit watershedwindow(QWidget *parent = nullptr);protected: void dragEnterEvent(QDragEnterEvent *event); void dropEvent(QDropEvent *event) ; void resizeEvent(QResizeEvent *event); signals: };#include "watershedwindow.h" watershedwindow::watershedwindow(QWidget *parent) : QWidget(parent){ this->setAcceptDrops(true);//设置允许向窗口拖入图片 this->setFixedSize(QSize(320,480)); label = new QLabel(this); label->setFixedSize(this->width(),this->height());} void watershedwindow::dragEnterEvent(QDragEnterEvent *event){ QStringList acceptedFileTypes; acceptedFileTypes.append("jpg"); acceptedFileTypes.append("jpeg"); acceptedFileTypes.append("bmp"); acceptedFileTypes.append("png"); if(event->mimeData()->hasUrls()&&event->mimeData()->urls().count()==1){ QFileInfo file(event->mimeData()->urls().at(0).toLocalFile()); if(acceptedFileTypes.contains(file.suffix().toLower())){ event->acceptProposedAction();//表明用户可以在窗口部件上拖放对象 } }} void watershedwindow::dropEvent(QDropEvent *event){ QFileInfo file(event->mimeData()->urls().at(0).toLocalFile()); if(pixmap.load(file.absoluteFilePath())){ label->setPixmap(pixmap.scaled(label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation)); }else{ QMessageBox::critical(this,tr("Error"),tr("The image file count not be read")); }} void watershedwindow::resizeEvent(QResizeEvent *event){ Q_UNUSED(event); if(!pixmap.isNull()){ label->setPixmap(pixmap.scaled(label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation)); } }}
关于“如何利用QT实现图片浏览器”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“如何利用QT实现图片浏览器”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。