Qt图片浏览器
1、概述
案例:制作一个小的图片浏览器,要求可以显示jpg、jpeg、png、bmp。可以从电脑上拖动图到窗口并显示出来。
实现步骤:
1.创建一个QWidget
2.在QWidget的构造方法中设置一个QLabel用户显示pixmap
3.在QWidget的protected中定义三个函数,dragEnterEvent(QDragEnterEvent *event)、dropEvent(QDropEvent *event)、resizeEvent(QResizeEvent *event);并在.cpp中实现这三个方法
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
4.在QWidget的构造函数中加入setAccessDrop(true),设置可向窗口拖拽内容
5.实现dragEnterEvent(拖拽)、dropEvent(拖拽放下)、resizeEvent(窗口重置)
6.实现第5步的三个方法
7.在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();//表明用户可以在窗口部件上拖放对象
}
}
}
8.在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"));
}
}
9.resizeEvent方法中对图像进行重置
void watershedwindow::resizeEvent(QResizeEvent *event){
Q_UNUSED(event);
if(!pixmap.isNull()){
label->setPixmap(pixmap.scaled(label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
}
}
10.结束
ps:下面是完整代码
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_OBJECT
private:
Mat src,gray,result,distanceImage;
QPixmap pixmap;
QLabel *label;
public:
explicit watershedwindow(QWidget *parent = nullptr);protected:
/**
* 拖进事件
* @brief dragEnterEvent
* @param event
*/
void dragEnterEvent(QDragEnterEvent *event);
/**
* 拖进放下事件
* @brief dropEvent
* @param 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));
}
}
}
3、演示图片
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
相关文章
- ubuntu安装qt4.8.7_ubuntu卸载qt
- Qt概述和Linux下安装
- Qt-修改界面无效的可能情况
- Qt 6中的异步操作
- Qt Qml 中动态创建 & 销毁视频容器技巧(一)
- 使用 Qt 连接远程 MySQL 数据库(qt连接远程mysql)
- Qt二进制文件操作(读和写)详解
- Linux下Qt环境快速安装指南(linux下qt安装)
- 实现Linux下Qt应用静态编译的方法(linux下qt静态编译)
- 在Linux中安装Qt第三方库的指南(linux安装qt库)
- Qt操作MYSQL:只需几步就能实现(qt操作mysql)
- Linux编译Qt库:从零开始(linux编译qt库)
- Linux上静态编译Qt应用实现方案(linux静态编译qt)
- 深入极致:Linux Qt 编译器之旅(linuxqt编译器)
- 数据库使用Qt连接Oracle数据库:一步一步实现(qt连接oracle)
- 开发Linux下 Qt开发:从入门到精通.(linux下的qt)
- 简明易懂的Linux下QT安装指南(linux下安装qt教程)
- Qt for Linux:下载与安装指南(qt下载linux)
- Linux下的Qt媒体播放器(qtlinux播放器)
- QT and MySQL: A Comprehensive Tutorial for Building Database Connections(qt连接mysql教程)
- QT实现对Oracle数据库的操作教程(qt操作oracle)
- 使用Qt实现MySQL数据库连接教程(qt连接mysql数据库)
- Linux Qt窗口:快速构建你的GUI界面(linux qt 窗口)
- 「Linux Qt SDK开发新时代:简单快速轻松上手」(linux qt sdk)
- Redis与Qt实现完美连接(redis连接qt)