Qt 打开本地文件夹,限定文件类型的两种方式

2023-10-29

需要打开本地文件夹的情况还挺多,比如File下面的open,new,save等功能。下面介绍两种打开本地文件夹的方式。

第一种:QFileDialog::getOpenFileName()函数,函数定义如下:

QString QFileDialog::getOpenFileName (
          QWidget * parent = 0,
          const QString & caption = QString(),
          const QString & dir = QString(),
          const QString & filter = QString(),
          QString * selectedFilter = 0,
          Options options = 0 )

第一个参数parent,用于指定父组件,比如 this。注意,很多Qt组件的构造函数都会有这么一个parent参数,并提供一个默认值0;

第二个参数caption,是对话框的标题,比如“open file”;

第三个参数dir,是对话框显示时默认打开的目录,"." 代表程序运行目录,"/" 代表当前盘符的根目录(Windows,Linux下/就是根目录了),也可以是平台相关的,比如"C:\“等;例如我想打开程序运行目录下的Data文件夹作为默认打开路径,这里应该写成”./Data/",若想有一个默认选中的文件,则在目录后添加文件名即可:"./Data/teaser.graph"

第四个参数filter,是对话框的后缀名过滤器,比如我们使用"Image Files(.jpg .png)“就让它只能显示后缀名是jpg或者png的文件。如果需要使用多个过滤器,使用”;;"分割,比如"JPEG Files(.jpg);;PNG Files(.png)";

第五个参数selectedFilter,是默认选择的过滤器,可以设置为0;

第六个参数options,是对话框的一些参数设定,比如只显示文件夹等等,它的取值是enum QFileDialog::Option,每个选项可以使用 | 运算组合起来。

QString strFileName = QFileDialog::getOpenFileName(this, "Open File", "",
             tr("exe(*.exe)"), 0, QFileDialog::DontResolveSymlinks);


/* 如上,父组件为this;窗口名称为"Open File";
  ""和"."都是默认打开工程目录;
  "exe(*.exe)"代表只允许选择exe类型的文件;
  第四个参数可以不写,但是为了设置第五个参数,这里设为0;
  第五个参数是QFileDialog::DontResolveSymlinks,这里用为即使选中的文件为快捷方式或链接,路径也只显示现有路径而不会跳转;QFileDialog::ShowDirsOnly表示只显示文件夹;*/

         
//如果需要以我们常见的windows路径表示出来,需要转换一下

strFileName = QDir::toNativeSeparators(strFileName);//Linux斜杠转Windows反斜杠

第二种方式是依次设置各项参数:

QFileDialog *pFilename = new QFileDialog(this, Qt::Dialog);

pFilename->setDirectory("E:/");//设置打开的默认目录
pFilename->setNameFilter(tr("exe(*.exe)"));//设置限定文件类型
pFilename->setOption(QFileDialog::DontResolveSymlinks);//可以加载链接路径而不会跳转

if (pFilename->exec()!=QFileDialog::Accepted)
{
      return;
}

QString strFileName = pFilename->selectedFiles() .first();

delete pFilename;

if (strFileName.isEmpty())
{
     QMessageBox::information(this,"Error Message", "No File Selected");
     return;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt 打开本地文件夹,限定文件类型的两种方式 的相关文章

  • 获取小部件的背景颜色 - 真的

    我无法获取小部件的实际背景颜色 在我的特殊情况下 我在使用 QTabWidget 中的小部件时遇到问题 这是在Windows7上 因此 经典的小部件有一些灰色背景 而选项卡内的小部件通常用白色背景绘制 I tried def bgcolor
  • 对齐坐标系

    Let s say I have 2 coordinate systems as it is shown in image attached 如何对齐这个坐标系 我知道我需要将第二个坐标系围绕 X 平移 180 度 然后将其平移到第一个坐标
  • 在 QtCreator 中将 OpenCV 2.3 与 Qt 结合使用

    随着 OpenCV 2 3 版本终于发布 我想在我的系统上编译并安装这个最新版本 由于我经常使用 Qt 和 QtCreator 我当然希望能够在我的 Qt 项目中使用它 我已经尝试了几种方法几个小时 但总是出现错误 第一次尝试 使用WITH
  • 如何在 Qt-Embedded 中(正确)输出多语言文本?

    我的目标系统是 linux 3 3 7 Qt Embedded 开源版 4 8 Droid 字体 取自 fonts droid 20111207 git 1 all deb Debian 软件包并复制到 usr lib fonts目录 主要
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • 如何在按下托盘图标菜单操作时执行功能?

    int main int argc char argv QApplication oApp argc argv QAction action1 QMenu menu QSystemTrayIcon TrayIcon QIcon favico
  • 当我尝试构建 Qt 4.7.1 静态库时,“找不到 -ljscore”

    我尝试从最新的源构建静态 Qt 库 但出现以下错误 usr bin ld cannot find ljscore collect2 ld returned 1 exit status 如何解决这个问题呢 这是 Qt 构建系统中自 4 7 0
  • QT/QML Android App,点击通知栏时打开应用程序

    我为 Android 应用程序制作了一个 QT 当我单击平板电脑中上面看到的按钮通知栏时 但是 如果单击通知 我的应用程序将打开 聚焦 不知道 并显示黑色窗口 简单来说怎么做呢 我的代码是 package org ays operation
  • QtCreator 调试暂停停在代码而不是汇编处

    如何配置 QtCreator 以便在调试并按下暂停时它会显示当前正在处理的代码 现在显示汇编 无法在任何地方找到有关此问题的答案 我使用的是 Windows 7 我在 Ubuntu 16 04 中使用 Qt Creator 4 2 2 时遇
  • Qt WinRT 应用程序无法访问文件权限被拒绝

    我需要使用 Qt 和 FFMPEG 开发 WinRT 应用程序 我根据指令构建了 WinRT 的 ffmpeghere https github com Microsoft FFmpegInterop我可以将库与我的项目链接起来 现在我需要
  • Qt - 如何粘合两个窗口并将它们移动在一起?

    就像qmmp Qt 音乐播放器ui设计一样 这两个或三个窗口实际上在同一个窗口中 因为只有一个dock图标 并且这些窗口可以一起移动并相互附着 我看了源码 好像有用QDockWidget 但我真的不知道如何获得它的细节 当您手动移动辅助窗口
  • PyQt:如何设置组合框项目可检查?

    为了将 GUI 小部件数量保持在最低限度 我需要找到一种方法来为用户提供下拉菜单项的选择 这些菜单项可用于过滤掉 listWidget 项中显示的内容 假设 listWidget 列出了 5 个不同类别的项目 Cat A Cat B Cat
  • 错误 LNK2001:无法解析的外部符号 __CxxFrameHandler3

    我正在将 Qt 从 VS 2013 迁移到 Qt 5 10 1 到 VS 2015 出现以下多个链接错误 error LNK2001 unresolved external symbol CxxFrameHandler3 error LNK
  • QGraphicsScene::clear 不会改变 sceneRect

    我有一个 QGraphicsScene 场景 和 QGraphicsView graphicsView 我有一个画图的方法 当我需要重绘所有图形时 我调用这个方法 一切都好 但我意识到 scene gt clear 不会改变 sceneRe
  • 使用 Visual Studio 2013 构建 Qt 5.2.1 的静态版本

    几天来我一直在尝试使用 Visual Studio 2013 构建 Qt 的静态版本 我就是不明白我做错了什么 System Windows 7 64 位 Visual Studio 2013 仍安装 Visual Studio 2012
  • 如何获取 QTableView 的标题列表?

    我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
  • 退出 Qt 程序的正确方法?

    我应该如何退出 Qt 程序 例如在加载数据文件时 发现文件损坏 并且用户需要退出该应用程序或重新启动数据文件 我是不是该 call exit EXIT FAILURE call QApplication quit call QCoreApp
  • Qt 布局,在小部件大小更改后调整到最小大小

    基本上我有一个QGridLayout里面有一些小部件 最重要的是 2 个标签 我用它们将图像绘制到屏幕上 好吧 如果用户愿意 他可以更改传入图像的分辨率 从而强制标签调整大小 我们假设标签的初始大小是320x240 用户将 VideoMod
  • 如何使QTableView类的restoreState()和saveState()正常工作?

    首先 我想说 我的问题已经在这里讨论过 并且这里是 https stackoverflow com questions 1163030 qt qtableview and horizontalheader restorestate 但答案并
  • 在 MacOS 终端上运行 ffmpeg [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我对 MacOS 相当陌生 我发现使用终端来获取信息并不容易ffmpeg和我在 Window 上一样正常运行 我有 ffmpeg 二进制文件ffmpe

随机推荐

  • 【Spring】ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK) 问题解决

    1 概述 转载 ERR INCOMPLETE CHUNKED ENCODING 200 OK 问题解决 我是在做这个项目的时候遇到这个报错 Spring Spring 网络原因导致日志下载失败 2 简述 浏览器调用接口报错 net ERR
  • Python使用threading.Timer实现执行可循环的定时任务

    前言 Python中使用threading Timer执行定时任务时 执行任务是一次性的 类似于JS中的setTimeout方法 我们对其在封装 改造成可循环的定时器 类似于JS中setInterval方法的效果 值得注意的是 thread
  • 关于distinct——去除重复记录

    distinct译为 不同的 有区别的 在SQL语句中表示去除重复记录的意思 举例 在员工表emp中查询所有的工作岗位 分析 在员工表中的工作岗位字段下有重复的工作岗位 我们在查询的时候就希望将重复的工作岗位显示出一个来就行 在不使用关键字
  • 【模块介绍】6×6矩阵键盘(硬件部分和扫描方式)

    目录 概述 原理图 扫描方式 扫描法 单个按键按下 多个按键按下 行反转法 图解 成品 概述 矩阵键盘非常常见 就是利用键盘组成矩阵来减少IO口的使用 做成6 6的矩阵键盘可以使用12个IO口读取36个按键 矩阵键盘的优势在于成本低 无需其
  • Java中switch case的使用

    Java switch case语句 switch case用来判断一个变量与一系列值中某个值是否相等 每个值称为一个分支 switch case规则 switch语句中变量类型可以是 byte short int char 从Java S
  • 网上疯传的《阿里Java架构师成长之路》!,网友瞬间沸腾了

    工作1 5年开发经验 当你们提出涨工资的时候 或者要offer的时候底气怎么样 是不是底气十足 不给涨工资就辞职 是不是有自信提出来主管 或者是项目经理都能同意 他们相当设法把你留住 如果这样你才是成功 什么技术都没有何谈工资 给你分析一下
  • Algo_math、判断两圆包含

    给定一个圆A X Y 圆心 R为半径 圆B x y 圆心 r为半径 判断 圆B 是否在 圆A 的内部 上图 则不包含 等价于 绿线长度 lt R X x
  • Java面试题详解:什么是面向对象编程

    参考答案 一般我们可以围绕面向对象的几个特征去展开 封装 继承 抽象 多态 个人理解 面向对象编程有点类似于数学建模 一般用于解决一个复杂的问题 解决这个问题通常涉及到多个物理或抽象概念 并且它们之间会有各种关系及交互行为 面向对象编程其实
  • boost.asio服务器使用io_service作为work pool

    使用io service作为处理工作的work pool 可以看到 就是通过io service post投递一个Handler到io service的队列 Handler在这个io service run内部得到执行 有可能你会发现 io
  • linux下查看谁在用显卡

    一般查看显卡的使用情况使用的命令为 nvidia smi 但是这个只能输出显卡的占用及进程 看不到谁在用 信息如下 但是可以借助上面的PID信息 查看对应的进程是谁调用的 命令为 ps f p 4417 其中4417就是上图中的其中一个PI
  • 激活函数---Sigmoid、Tanh、ReLu、softplus、softmax

    激活函数 就是在神经网络的神经元上运行的函数 负责将神经元的输入映射到输出端 常见的激活函数包括 Sigmoid TanHyperbolic tanh ReLu softplus softmax 这些函数有一个共同的特点那就是他们都是非线性
  • 数据结构:树的概念和结构

    文章目录 1 树的概念 2 树的结构 3 树的相关概念 4 树的表示 孩子表示法 双亲表示法 孩子兄弟表示法 5 树在实际中的应用 1 树的概念 树是一种非线性的数据结构 它是由 n n gt 0 个有限结点组成一个具有层次关系的 把它叫做
  • TCP —— TCP连接的建立与释放

    一 TCP连接管理 在TCP连接建立的过程中 要解决以下三个问题 要使每一方都能够确知对方的存在 要允许双方协商一些参数 如最大窗口值 是否使用窗口扩大选项 时间戳选项及服务质量等 能够对运输实体资源 如缓存大小 连接表中的项目等 进行分配
  • echarts 暂无数据的完美解决办法

    前景 很简单的一个思想 我希望没有数据的时候 不显示图表 并且用empty来替换 但是直接使用v if 会出错 因为调用的时候 拿不到dom了 v if直接把dom干掉了 怎么办呢 直接上步骤 1 第一步 我们应该在每次点击按钮的时候 发送
  • EM算法及其推广---《统计学习方法》第9章

    EM算法是一种迭代算法 用于含有隐变量的概率模型参数的极大似然估计 或极大后验概率估计 EM算法的每次迭代由两步组成 E步求期望值 M步求最大值 EM算法是一种对模型参数的估计 该模型中含有隐变量 EM算法的引入 EM算法 概率模型有时既含
  • 即时通讯(IM)开源项目OpenIM每周迭代版本发布-音视频实时通话-v2.0.4

    介绍 OpenIM每周五发布新版 包括新特性发布 bug修复 同时合并PR 由于2 0版本重构完毕 架构更清晰 代码更规范 先邀请各位参与OpenIM社区建设 包括技术开发 技术分享等 特性开发 性能优化 bug修复等 有兴趣的同学可以加我
  • 使用burpsuite抓不到127.0.0.1本地包(针对Firefox浏览器)

    解决方法一 首先第一步点击浏览器右上角按钮 点击设置 点击常规 设置 按照如图设置 设置完毕后基本能解决问题 如果不行还有第二种解决方式 解决方法二 浏览器地址栏种输入 about config 搜索框输入如下 把值改为true即可 net
  • Spring Cloud微服务-网关(2)

    微服务网关Zuul 为什么需要微服务网关 不同的微服务一般有不同的网络地址 而外部的客户端可能需要调用多个服务的接口才 能完成一个业务需求 比如一个电影购票的收集APP 可能回调用电影分类微服务 用户 微服务 支付微服务等 如果客户端直接和
  • 二叉树的创建、遍历、深度、叶子节点数

    回忆一下 呵呵 include
  • Qt 打开本地文件夹,限定文件类型的两种方式

    需要打开本地文件夹的情况还挺多 比如File下面的open new save等功能 下面介绍两种打开本地文件夹的方式 第一种 QFileDialog getOpenFileName 函数 函数定义如下 QString QFileDialog