我的编程空间,编程开发者的网络收藏夹
学习永远不晚

QT实战之实现图片浏览系统

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

QT实战之实现图片浏览系统

引言

本系统支持,自动播放,左右拖动切换,点击列表切换,点击按钮切换;是一个标准的图像浏览软件。

Windows 图片浏览器,可以查看当前文件夹下的图片,往上翻、往下翻并且自动播放;

此系统增加一个列表;

实现功能

1.浏览电脑里的文件夹,将当前文件夹下的图片列表罗列出来;

2.鼠标点击列表上的某一张图片,图片将显示出来;

3.可以控制浏览当前图片的上一张和下一张;

4.实现鼠标拖动图片,左划,右划切换图片;

5.实现自动播放的开始和停止控制。

效果

实现图片浏览所用知识

包括窗口部件、布局、事件、对象模型与容器类、图形视图、模型/视图编程以及多线程等。

实现流程

1.定义一个图片类,该类包含图片的路径、文件名、文件id以及获取这些变量的函数。

2. 主要包含添加图像以及获取所有图像以及新加入图像的函数。

3.最后通过将图片名字加入到界面左侧QDockWidget部件中的QTreeView中,

4.通过双击可查看完整图片,以及通过滚轮和鼠标等事件来对图片进行一些操作。 

实现环境和UI设计

环境:VS2017 + Qt5.12.4

具体实现

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QListWidget>
#include <QMainWindow>
#include <QTimer>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
 
private slots:
    void on_btnOpen_clicked();
 
    void on_listWidget_itemClicked(QListWidgetItem *item);
 
    void MyFunction();
    void on_pushButton_clicked();
 
    void on_btnLast_clicked();
 
    void on_btnNext_clicked();
 
protected:
    bool eventFilter(QObject *watch, QEvent *evn);
 
    QStringList getFileNames(const QString &path);
private:
    Ui::MainWindow *ui;
 
    QVector<QString> mListPath;
    QTimer mTimer;
    int index ;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
 
#include <QFileInfoList>
#include <QString>
#include <QDir>
#include <QMessageBox>
#include <QImage>
#include "qevent.h"
#include <QDebug>
#pragma execution_character_set("utf-8")
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    index =0;
    mTimer.setInterval(1000);
    connect(&mTimer,SIGNAL(timeout()),this,SLOT(MyFunction()));
    on_btnOpen_clicked();
    mTimer.start(1000);
    ui->btnOpen->setVisible(false);
   // ui->pushButton->setVisible(false);
    this->installEventFilter(this);
 
    this->setWindowTitle("图片浏览器");
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::MyFunction()
{
    if (index == 5) {
        index = 0;
    } else {
        index++;
    }
    if (index == 5) {
        index = 0;
    }
 
    // this->setStyleSheet(QString("background-image: url(:/%1.png);").arg(index));
     QString strIndex = mListPath.at(index);
 
      qDebug()<<"index "<<QString::number(index)<<"strIndex "<<strIndex;
      QDir filePath(ui->inputDirPath->text());
 
    QString fullName = filePath.absoluteFilePath(strIndex);
    QImage img(fullName);
    QImage thumb = img.scaled(ui->label->width(),ui->label->height(),Qt::KeepAspectRatio);
    ui->label->setPixmap(QPixmap::fromImage(thumb));
}
void MainWindow::on_btnOpen_clicked()
{
 
   QString filePath = QCoreApplication::applicationDirPath()+"/pic";
   ui->inputDirPath->setText(filePath);
  // QMessageBox::information(this,"提示!",filePath);
    QDir dir(filePath);
    // 判断文件夹是否存在
    if(dir.exists()){
        ui->listWidget->clear();
        QFileInfoList info_list = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
        for(int i =0;i<info_list.count();i++){
            ui->listWidget->addItem(info_list.at(i).fileName());
 
            mListPath.push_back(info_list.at(i).fileName());
        }
 
 
    }
    else{
        QMessageBox::information(this,"提示!","文件夹不存在");
    }
 
}
QStringList MainWindow::getFileNames(const QString &path)
{
    QDir dir(path);
    QStringList nameFilters;
    nameFilters << "*.jpg" << "*.png";
    QStringList files = dir.entryList(nameFilters, QDir::Files|QDir::Readable, QDir::Name);
    return files;
}
void MainWindow::on_listWidget_itemClicked(QListWidgetItem *item)
{
    if(mTimer.isActive())
      mTimer.stop();
    QDir filePath(ui->inputDirPath->text());
 
    QString fullName = filePath.absoluteFilePath(item->text());
    QImage img(fullName);
    QImage thumb = img.scaled(ui->label->width(),ui->label->height(),Qt::KeepAspectRatio);
    ui->label->setPixmap(QPixmap::fromImage(thumb));
 
 
}
//点击事件函数
bool MainWindow::eventFilter(QObject *watch, QEvent *evn)
{
    static int press_x;     //点击鼠标时获取的横坐标x
    static int press_y;     //点击鼠标时获取的纵坐标y
    static int relea_x;     //松开鼠标时获取的横坐标x
    static int relea_y;     //松开鼠标时获取的纵坐标y
 
    QMouseEvent *event = static_cast<QMouseEvent *>(evn);       //将图片QT QEvent 转换为 QMouseEvent ,QKeyEvent....等子类
    //获取点击鼠标(手指)时的坐标
    if (event->type() == QEvent::MouseButtonPress)
    {
            press_x = event->globalX();
            press_y = event->globalY();
    }
    //获取松开鼠标(手指)时的坐标
    if(event->type() == QEvent::MouseButtonRelease)
    {
        relea_x = event->globalX();
        relea_y = event->globalY();
 
 
    }
    //对鼠标(手指)滑动的方向进行判断(右滑)
    if((relea_x - press_x) > 5 && event->type() == QEvent::MouseButtonRelease && qAbs(relea_y - press_y) < 50)
    {
       on_btnNext_clicked();
    }
if( event->type() == QEvent::MouseButtonRelease)
     qDebug()<<"releax "<<QString::number(press_x - relea_x)<<"releay "<<QString::number(relea_y - press_y);
    //对鼠标(手指)滑动的方向进行判断(左滑)
    if((press_x - relea_x) > 5 && event->type() == QEvent::MouseButtonRelease && qAbs(relea_y - press_y) < 50)
    {
       on_btnLast_clicked();
    }
 
    return QWidget::eventFilter(watch, evn);
}
 
 
 
 
void MainWindow::on_pushButton_clicked()
{
    if(ui->pushButton->text()=="滑动切换")
    {
        ui->pushButton->setText("自动播放");
        if(mTimer.isActive())
          mTimer.stop();
    }
    else
    {
        ui->pushButton->setText("滑动切换");
        if(!mTimer.isActive())
          mTimer.start();
    }
}
 
void MainWindow::on_btnLast_clicked()
{
    if(index == -1)
    {
        index = 4;
    }
    else
    {
        index--;
    }
 
    if(index == -1)
    {
        index = 4;
    }
  //  this->setStyleSheet(QString("background-image: url(:/%1.png);").arg(index));
    QString strIndex = mListPath.at(index);
 
     qDebug()<<"index 111"<<QString::number(index)<<"strIndex "<<strIndex;
     QDir filePath(ui->inputDirPath->text());
 
     QString fullName = filePath.absoluteFilePath(strIndex);
    QImage img(fullName);
    QImage thumb = img.scaled(ui->label->width(),ui->label->height(),Qt::KeepAspectRatio);
    ui->label->setPixmap(QPixmap::fromImage(thumb));
}
 
void MainWindow::on_btnNext_clicked()
{
    if (index == 5) {
        index = 0;
    } else {
        index++;
    }
    if (index == 5) {
        index = 0;
    }
 
    // this->setStyleSheet(QString("background-image: url(:/%1.png);").arg(index));        //切换图片
     QString strIndex = mListPath.at(index);
 
      qDebug()<<"index "<<QString::number(index)<<"strIndex "<<strIndex;
      QDir filePath(ui->inputDirPath->text());
 
      QString fullName = filePath.absoluteFilePath(strIndex);
    QImage img(fullName);
    QImage thumb = img.scaled(ui->label->width(),ui->label->height(),Qt::KeepAspectRatio);
    ui->label->setPixmap(QPixmap::fromImage(thumb));
}

到此这篇关于QT实战之实现图片浏览系统的文章就介绍到这了,更多相关QT图片浏览系统内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

QT实战之实现图片浏览系统

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

QT实战之实现图片浏览系统

这篇文章主要介绍了如何利用QT编写一个图片浏览系统,可以支持自动播放,左右拖动切换,点击列表切换,点击按钮切换等功能,感兴趣的小伙伴可以跟随小编一起了解一下
2023-05-17

Qt实战之实现图片浏览器

这篇文章主要为大家详细介绍了如何利用Qt实现简易的图片浏览器,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以了解一下
2023-03-19

Qt怎么实现图片浏览器

这篇文章主要介绍了Qt怎么实现图片浏览器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Qt怎么实现图片浏览器文章都会有所收获,下面我们一起来看看吧。图片浏览器逻辑实现图片浏览器用到了前面几乎所有的知识,包括窗口
2023-07-05

如何利用QT实现图片浏览器

这篇文章主要介绍了如何利用QT实现图片浏览器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何利用QT实现图片浏览器文章都会有所收获,下面我们一起来看看吧。1、概述案例:制作一个小的图片浏览器,要求可以显示jp
2023-07-05

基于Qt如何实现SVG图片浏览器

本篇内容主要讲解“基于Qt如何实现SVG图片浏览器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Qt如何实现SVG图片浏览器”吧!介绍SVG的英文全称是Scalable Vector Gra
2023-07-02

利用QT实现图片浏览器的示例详解

这篇文章主要和大家分享一个小案例:利用QT制作一个小的图片浏览器,要求可以显示jpg、jpeg、png、bmp,还可以从电脑上拖动图到窗口并显示出来,感兴趣的可以了解一下
2023-02-23

Android实现图片浏览器示例

本文所述为一个基础的Android图片浏览器代码,是仿写Google原版实现的,代码中实现了主要的实现过程和方法,具体的完善还需要自己添加,代码中有很多注释,可帮助新手们快速理解代码,使用了部分图像资源。 主要功能代码如下:package
2022-06-06

Node实战学习:浏览器预览项目所有图片

在前端实际项目开发中,会有这样一种场景。每次引入新的图片,并不知道这个资源是否被引用过,所以会点开存放图片的资源一个个去看。如果有个能力,将项目图片资源罗列到一起查看,并方便看到引入路径的话,就会大大节约开发的体力活。
2023-05-14

Android实现网络图片浏览功能

我们在上网的过程中经常看到各种图片,那你知道它是如何实现的吗?接下来就让我们一块探讨一下。 网络图片的浏览可以分为俩部分,基本的页面布局与界面交互,让我们一步步的来编写。 基本布局很简单,只需要有一个输入图片链接的EditText,一个浏览
2023-05-31

Android编程实现的超炫图片浏览器

本文实例讲述了Android编程实现的超炫图片浏览器。分享给大家供大家参考,具体如下: 使用过Android自带的gallery组件的人都知道,gallery实现的效果就是拖动浏览一组图片,相比iphone里也是用于拖动浏览图片的cover
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录