返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >QT实战之打开最近图片功能的实现
  • 872
分享到

QT实战之打开最近图片功能的实现

2024-04-02 19:04:59 872人浏览 八月长安
摘要

目录一、项目介绍二、项目基本配置三、UI界面设置四、主程序实现4.1 mainwindow.h头文件4.2 mainwindow.cpp源文件五、效果演示一、项目介绍 本文介绍利用Q

一、项目介绍

本文介绍利用Qt和QSettings实现打开最近图片功能。

二、项目基本配置

新建一个Qt案例,项目名称为“RecentPhotoTest”,基类选择“QMainWindow”,取消选中创建UI界面复选框,完成项目创建。

三、UI界面设置

无UI界面

四、主程序实现

4.1 mainwindow.h头文件

头文件中需要声明若干槽函数、变量和相应函数:

private:
    QMenu* fileMenu;
    QMenu* recentFilesMenu;

    QAction* openAction;
    QList<QAction*> recentFileActionList;
    const int maxFileNr=5;

    QString currentFilePath;
    QLabel *imageLabel;

    void loadFile(const QString& filePath);
    void adjustForCurrentFile(const QString& filePath);
    void updateRecentActionList();

4.2 mainwindow.cpp源文件

需要在构造函数中添加如下代码:

    imageLabel = new QLabel;
    setCentralWidget(imageLabel);//设置中心部件
    //Open Action
    openAction = new QAction(tr("&Open..."), this);//open
    openAction->setShortcuts(QKeySequence::Open);  //设置快捷键
    connect(openAction, &QAction::triggered, this, [=]()
    {
        QString filePath = QFileDialog::getOpenFileName(
                           this, tr("Open File"), "",
                           tr("Images (*.png *.xpm *.jpg *.gif)"));
        if (!filePath.isEmpty())
            loadFile(filePath);
    });

    //recentFile Action
    QAction* recentFileAction = nullptr;
    for(auto i = 0; i < maxFileNr; ++i){
        recentFileAction = new QAction(this);
        recentFileAction->setVisible(false);

        connect(recentFileAction, &QAction::triggered, this, [=]()
        {
            loadFile(recentFileAction->data().toString());
        });
        recentFileActionList.append(recentFileAction);
    }

    // create menus
    fileMenu = menuBar()->addMenu(tr("&File"));
    fileMenu->addAction(openAction);

    recentFilesMenu = fileMenu->addMenu(tr("Open Recent"));
    for(auto i = 0; i < maxFileNr; ++i)
        recentFilesMenu->addAction(recentFileActionList.at(i));

    updateRecentActionList();

    resize(350, 250);//调整尺寸

新建一个imageLabel,用于图片显示;新建Open Action和RecentFile Action,将这两个action与相应的槽函数相连,然后在菜单栏上创建File和Open Recent菜单,用于承接相应的action,最后更新RecentActionList及调整尺寸。

当点击Open菜单时,选择图像并在界面中进行显示:

//加载图片
void MainWindow::loadFile(const QString &filePath){
    QFile file(filePath);
    //如果不能打开
    if (!file.open(QFile::ReadOnly)) {
        QMessageBox::warning(this, tr("Recent Photos"),
                             tr("This file could not be found:\n%1.")
                             .arg(filePath));
        return;
    }

    QPixmap pMap(filePath);
    //如果图片为空
    if (pMap.isNull()) {
        QMessageBox::infORMation(this, tr("Recent Photos"),
                      tr("Cannot load:\n%1.")
                      .arg(filePath));
        return;
    }

    imageLabel->setPixmap(pMap);                //显示图像
    imageLabel->setAlignment(Qt::AlignCenter);  //居中对齐
    adjustForCurrentFile(filePath);
}

调整菜单中最近文件的位置,使得每次新打开的文件都在RecentFile Action菜单栏的最上方:

//调整当前文件(使得每次新打开的文件都在最上方)
void MainWindow::adjustForCurrentFile(const QString &filePath){
    currentFilePath = filePath;
    setWindowFilePath(currentFilePath);


    QSettings settings("Recently", "Recent Photos");
    QStringList recentFilePaths = settings.value("recentPhotos").toStringList();//获取键对应的值
    recentFilePaths.removeAll(filePath);    //移除filePath
    recentFilePaths.prepend(filePath);      //在开头增加filePath
    //如果尺寸超过最大尺寸,则删除最后一项
    while (recentFilePaths.size() > maxFileNr)
        recentFilePaths.removeLast();
    settings.setValue("recentPhotos", recentFilePaths);//设置键recentPhotos对应的值

    updateRecentActionList();
}

最后更新RecentActionList,使得每次打开的图片都放到RecentActionList中:

//更新recentFileActionList
void MainWindow::updateRecentActionList(){
    QSettings settings("Recently", "Recent Photos");
    QStringList recentFilePaths = settings.value("recentPhotos").toStringList();//获取键对应的值

    auto itEnd = 0;
    if(recentFilePaths.size() <= maxFileNr)
        itEnd = recentFilePaths.size();
    else
        itEnd = maxFileNr;

    for (auto i = 0; i < itEnd; ++i) {
        QString strippedName = QFileInfo(recentFilePaths.at(i)).fileName();//返回文件名(不包含路径)
        recentFileActionList.at(i)->setText(strippedName);  //描述性文本
        recentFileActionList.at(i)->setData(recentFilePaths.at(i)); //数据
        recentFileActionList.at(i)->setVisible(true);
    }

    for (auto i = itEnd; i < maxFileNr; ++i)
        recentFileActionList.at(i)->setVisible(false);
}

五、效果演示

完整效果如下:

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

--结束END--

本文标题: QT实战之打开最近图片功能的实现

本文链接: https://www.lsjlt.com/news/151599.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • QT实战之打开最近图片功能的实现
    目录一、项目介绍二、项目基本配置三、UI界面设置四、主程序实现4.1 mainwindow.h头文件4.2 mainwindow.cpp源文件五、效果演示一、项目介绍 本文介绍利用Q...
    99+
    2024-04-02
  • QT实战之打开最近文档功能的实现
    目录一、项目介绍二、项目基本配置三、UI界面设置四、主程序实现4.1 mainwindow.h头文件4.2 mainwindow.cpp源文件4.3 main.cpp五、效果演示一、...
    99+
    2024-04-02
  • Qt实战之实现图片浏览器
    目录图片浏览器逻辑效果图具体实现utils.himage.himage_group.himage_group.cppqimgviewwidget.hqimgviewwidget.cp...
    99+
    2023-03-19
    QT实现图片浏览器 QT图片浏览器 QT图片
  • QT实战之实现图片浏览系统
    目录引言实现功能效果实现图片浏览所用知识实现流程实现环境和UI设计具体实现引言 本系统支持,自动播放,左右拖动切换,点击列表切换,点击按钮切换;是一个标准的图像浏览软件。 Windo...
    99+
    2023-05-17
    QT实现图片浏览系统 QT图片浏览系统 QT图片浏览
  • Qt利用ImageWatch实现图片查看功能
    使用Qt实现ImageWatch图片查看功能,图片放大可见RGB像素值。支持打开大图片,即打开一个几百MB甚至几GB的大图片。 1、什么是ImageWatch Visual Stud...
    99+
    2024-04-02
  • Qt怎么利用ImageWatch实现图片查看功能
    本篇内容介绍了“Qt怎么利用ImageWatch实现图片查看功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是ImageWatchVi...
    99+
    2023-06-30
  • JavaScript图片打印功能怎么实现
    这篇文章主要讲解了“JavaScript图片打印功能怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript图片打印功能怎么实现”吧!其实浏览器 window 对象提供了 ...
    99+
    2023-07-05
  • Python实战之实现百度智能图片识别
    这是我们最终的效果,那么我们一起来看一看如何实现吧!超简单易上手哦! 首先我们需要先配置pyqt5的资源,这里就不说关于安装包的问题了(pip或者pycharm可以直接添加解决的问...
    99+
    2024-04-02
  • Qt编写地图之实现跨平台功能
    目录一、前言二、功能特点1 省市区域地图封装类功能特点2 百度地图封装类功能特点3 离线地图下载类功能特点4 省市轮廓下载类功能特点三、体验地址四、效果图五、相关代码一、前言 跨平台...
    99+
    2024-04-02
  • iOS开发实现图片浏览功能
    本文实例为大家分享了iOS实现图片浏览功能的具体代码,供大家参考,具体内容如下 这是整体的效果图: 其中main.stroyboard中的控件有2个button,2个label,一...
    99+
    2024-04-02
  • Qt+Quick实现图片演示器的开发
    目录介绍运行示例创建主窗口访问文件夹内容在照片表面上显示图像处理捏合手势介绍 一个适用于触摸设备的QML应用程序,它使用一个带有FolderListModel的Repeater来访问...
    99+
    2023-01-04
    Qt Quick实现图片演示器 Qt Quick图片演示器 Qt Quick Qt 图片演示
  • QT圆形图像剪切功能实现
    剪切代码: Rectangle{ id:idRectRound width: 250 ...
    99+
    2022-11-13
    qt图像剪切 qt圆形剪切
  • Android开发之图片旋转功能实现方法【基于Matrix】
    本文实例讲述了Android开发之图片旋转功能实现方法。分享给大家供大家参考,具体如下:在Android中进行图像旋转需要使用Matrix,它包含了一个3*3的矩阵,专门用于进行图像变换匹配。Matrix ,中文里叫矩阵,高等数学里有介绍,...
    99+
    2023-05-30
    android 图片 旋转
  • Qt数据库应用之实现图片转pdf
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 用户的需求真的是千奇百怪,刚做完不同页面横向纵向排版的需求,又来个需要图片转pdf的需求,提供静态函数直接使用。 ...
    99+
    2024-04-02
  • Python人工智能实战之以图搜图的实现
    目录前言一、实验要求二、环境配置三、代码文件1、vgg.py2、index.py3、test.py四、演示1、项目文件夹2、相似度排序输出3、保存结果五、尾声前言 基于vgg网络和K...
    99+
    2024-04-02
  • Qt项目实战之方块游戏的实现
    目录1.方块游戏架构2.游戏逻辑3.效果图4.具体实现1.方块游戏架构 在这个游戏中,有一个区域用来摆放方块,该区域宽为10,高为20,以小正方形为单位,它可以看作是拥有20行10列...
    99+
    2023-03-19
    Qt实现方块游戏 Qt方块游戏 Qt游戏
  • Android实现图片上传功能
    最近在开发中,涉及到用户的意见反馈功能这一方面的开发,需要用户输入的文字或者提交的图片,效果大概类似于微信朋友圈那样的图片选择器,一开始自己找了个用universal-imag...
    99+
    2022-06-06
    图片上传 图片 Android
  • Android实现图片查看功能
    目录一、效果图二、支持功能三、核心实现方法3.1 缩放 Matrix.postScale(float sx, float sy, float px, float py)3.2 移动 ...
    99+
    2024-04-02
  • Vue.js实现图片切换功能
    本文实例为大家分享了Vue.js实现图片切换功能的具体代码,供大家参考,具体内容如下 实现功能如下 文件目录如下,要实现本功能只需要修改图片的存储位置即可 代码如下 <...
    99+
    2024-04-02
  • js实现图片切割功能
    本文实例为大家分享了js实现图片切割的具体代码,供大家参考,具体内容如下 代码: <!DOCTYPE html> <html lang="en"> &l...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作