news 2026/4/8 7:34:57

C++、Qt中打开文件夹获取文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++、Qt中打开文件夹获取文件
void Qt_operateping::onOpenFileClicked() { // 打开文件对话框,供用户选择图片文件 // getOpenFileName() 函数的四个参数依次是: // 1. 父组件,通常传递当前对象 this // 2. 对话框标题 // 3. 初始打开的文件路径(此处是 D 盘根目录) // 4. 过滤器,限制显示的文件类型(这里是 PNG 和 JPG 格式的图片) QString filename = QFileDialog::getOpenFileName(this, "请选择图片", "D:/", "图片(*.png *.jpg)"); // 如果用户没有选择任何文件,直接返回 if (filename.isEmpty()) { return; } // 将选择的文件路径显示在界面上的 QLineEdit 中 //lineEdit_path->setText(filename); ui.lineEdit->setText(filename); // 将选择的图片加载成 QPixmap 对象,并显示在 QLabel 中 //label_image->setPixmap(QPixmap(filename)); ui.label_2->setPixmap(QPixmap(filename)); } void Qt_operateping::onOpenFileClicked1() { // 获取应用程序的配置文件路径,存放在当前应用的目录下 QString config_path = qApp->applicationDirPath() + "/config/Setting.ini"; qDebug() << config_path; // 输出配置文件路径,便于调试查看 // 使用 QSettings 读取 ini 文件中的配置信息,文件不存在时会自动创建 QSettings* pIniSet = new QSettings(config_path, QSettings::IniFormat); // 从配置文件中读取上次使用的路径,如果没有记录则返回空字符串 QString lastPath = pIniSet->value("/LastPath/path").toString(); // 如果没有上次记录的路径,使用系统默认的图片目录 if (lastPath.isEmpty()) { // QStandardPaths::writableLocation 获取系统中常用路径 lastPath = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); } // 打开文件选择对话框,初始路径设置为 lastPath QString filename = QFileDialog::getOpenFileName(this, "请选择图片", lastPath, "图片(*.png *.jpg)"); // 如果用户没有选择文件,直接返回 if (filename.isEmpty()) { return; } // 将选择的文件路径显示在界面上的文本框中 ui.lineEdit->setText(filename); QPixmap* pix = new QPixmap(filename); pix->scaled(ui.label_2->size(), Qt::KeepAspectRatioByExpanding); ui.label_2->setScaledContents(true); // 显示选择的图片 //ui.label_2->setPixmap(QPixmap(filename)); ui.label_2->setPixmap(*pix); // 获取文件路径的目录部分,更新配置文件中的路径 int end = filename.lastIndexOf("/"); QString _path = filename.left(end); pIniSet->setValue("/LastPath/path", _path); // 删除 QSettings 对象,释放内存 delete pIniSet; pIniSet = nullptr; qDebug() << _path; // 输出更新后的路径,便于调试查看 } void Qt_operateping::onOpenFileClicked2() { // 获取应用程序的配置文件路径,存放在当前应用的目录下 QString config_path = qApp->applicationDirPath() + "/config/Setting.ini"; qDebug() << config_path; // 输出配置文件路径,便于调试查看 // 使用 std::unique_ptr 管理 QSettings 对象,自动管理内存 std::unique_ptr<QSettings> pIniSet(new QSettings(config_path, QSettings::IniFormat)); // 从配置文件中读取上次使用的路径 QString lastPath = pIniSet->value("/LastPath/path").toString(); // 如果没有上次记录的路径,使用系统默认的图片目录 if (lastPath.isEmpty()) { lastPath = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); } // 打开文件选择对话框,初始路径设置为 lastPath QString filename = QFileDialog::getOpenFileName(this, "请选择图片", lastPath, "图片(*.png *.jpg)"); // 如果用户没有选择文件,直接返回 if (filename.isEmpty()) { return; } // 将选择的文件路径显示在界面上的文本框中 ui.lineEdit->setText(filename); // 显示选择的图片 ui.label_2->setPixmap(QPixmap(filename)); // 获取文件路径的目录部分,更新配置文件中的路径 int end = filename.lastIndexOf("/"); QString _path = filename.left(end); pIniSet->setValue("/LastPath/path", _path); qDebug() << _path; // 输出更新后的路径,便于调试查看 }
  • QSettings
    这是 Qt 提供的一个便捷的类,用于保存应用程序的配置信息,支持使用 ini 文件或者注册表。这里使用 ini 文件存储用户上次选择的路径。在这个例子中,配置文件是Setting.ini,其中存储了用户上次打开文件的路径。

    • pIniSet->value("/LastPath/path").toString():读取配置中的路径值。

    • pIniSet->setValue("/LastPath/path", _path):在用户选择完图片后,保存其路径。

  • QStandardPaths::writableLocation()
    用于获取操作系统中特定类型的文件夹,例如图片、文档等。在这里当用户第一次打开程序时,程序会自动使用系统的图片目录作为初始路径。

  • **QString::lastIndexOf()**** 和 ****QString::left()**
    用于字符串的操作,lastIndexOf()查找路径中的最后一个/left()截取文件路径的目录部分。

特点与改进:

在第一个的基础上添加了路径记忆功能,每次打开文件选择对话框时,都会显示上次用户选择的文件夹,大大提高了用户体验。同时,它将路径存储在 ini 文件中,确保下次程序启动时可以继续记住路径。

2、

使用智能指针优化内存管理:

2中,我们手动newdeleteQSettings对象,虽然这能正常工作,但容易导致内存泄漏问题。为了安全管理内存,2使用了 C++11 引入的智能指针std::unique_ptr,从而自动管理对象的生命周期。

  • std::unique_ptr
    智能指针是 C++11 引入的内存管理工具,能够在对象不再需要时自动释放内存,从而避免内存泄漏。在这里使用std::unique_ptr来管理QSettings对象的生命周期,无需手动delete
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/7 8:32:59

多存储源文件同步终极方案:5分钟搞定跨平台数据一致性

多存储源文件同步终极方案&#xff1a;5分钟搞定跨平台数据一致性 【免费下载链接】zfile 项目地址: https://gitcode.com/gh_mirrors/zfi/zfile 还在为不同存储设备间的文件版本混乱而烦恼吗&#xff1f;当团队成员在本地磁盘、云盘和服务器上同时编辑文档时&#xff…

作者头像 李华
网站建设 2026/4/7 7:10:36

Expo通知功能深度解析:5个实战技巧提升用户体验

Expo通知功能深度解析&#xff1a;5个实战技巧提升用户体验 【免费下载链接】expo An open-source platform for making universal native apps with React. Expo runs on Android, iOS, and the web. 项目地址: https://gitcode.com/GitHub_Trending/ex/expo Expo作为R…

作者头像 李华
网站建设 2026/4/1 18:12:21

Stata中介效应检验完全指南:从安装到实战

Stata中介效应检验完全指南&#xff1a;从安装到实战 【免费下载链接】Stata15.1中介效应Sobel检验安装包 Stata 15.1 中介效应 Sobel 检验安装包 项目地址: https://gitcode.com/open-source-toolkit/55355 还在为Stata中介效应分析发愁吗&#xff1f;今天我们将带您快…

作者头像 李华
网站建设 2026/4/7 5:18:36

揭秘RPA:高效办公的未来利器

这里以金智维版本学习为例。1.什么是RPA K-RPA里的“RPA”是“Robotic Process Automation”的英文缩写&#xff0c;中文翻译为机器人流程自动化&#xff0c;亦可翻译成软件机器人、虚拟劳动者&#xff0c;是可以记录人在计算机上的操作&#xff0c;并重复运行的软件。因其可以…

作者头像 李华
网站建设 2026/4/3 23:25:35

14、互联网应用全攻略:新闻组、邮件与即时通讯的使用指南

互联网应用全攻略:新闻组、邮件与即时通讯的使用指南 1. 新闻组的探索与使用 1.1 新闻组简介 新闻组可以被视为公共信息公告板,在这里,有相似兴趣的人们聚在一起讨论某个主题。和网络论坛一样,新闻组也是获取技术支持的好地方。不过,Firefox 并不提供新闻组支持,你可以…

作者头像 李华
网站建设 2026/4/7 15:33:32

16、Linux 文件管理与文件系统全解析

Linux 文件管理与文件系统全解析 1. Xandros文件管理器的使用 Xandros 提供了一款定制的文件管理器,它看起来是基于 Konqueror 开发的。访问这个文件管理器的一种方法是双击桌面上的“Home”目录。该文件管理器的工作方式与本章中介绍的其他文件管理器类似。由于 Xandros 是…

作者头像 李华