使用qt-mingw版做的软件,发给客户以后说工作不正常,配置文件无法打开,或者加载数据文件不正常。远程查看以后,发现客户经常将程序放置在中文带空格的路径下,导致文件打开不正常。所以最近想在程序上解决一下,让客户少出问题。

首先在网上查了QT打开文件路径中含有中文和空格问题,抄了如下代码:(https://blog.csdn.net/m0_37906001/article/details/76672634)

     QString fileName=QFileDialog::getOpenFileName(this,tr("Open Image"),".",tr("Image Files(*.png *.jpg *jpeg *.bmp *.avi *.mp4)"));

     QTextCodec *code = QTextCodec::codecForName("GB2312");//解决中文路径问题
std::string name = code->fromUnicode(fileName).data(); if(fileName.isEmpty())
{
return;
} inputVideo.open(name);//我准备打开的是本地视频文件

非常简单于是就加在自己代码里了:

 if(ui->bt_replay->text()=="回放")
{
auto name=QFileDialog::getOpenFileName(,"","","pcap文件(*.pcap)");
QTextCodec *code = QTextCodec::codecForName("gb2312");//解决中文路径问题
name = code->fromUnicode(name).data();
cout<<"convert gb2312:"<<name.toStdString()<<endl;
if(name!="")
{ lctrl.replay_dat(name.toStdString());
ui->bt_replay->setText("退出回放");
lctrl.replay_stat=;
ui->lb_replay_stat->setText("加载数据");
}
}

结果不行。认为是编码问题,换了编码,加了编码成功的判断,无论如何也不行,但是在网上搜到的代码都非常简单。

最后发现,QString的存储是按Unicode存的,输入的时候会把输入数据转换成Unicode,转码方式默认是Latin-1,导致转码以后的文件名又被转回去了,而且转的还不对

于是使用std::string解决这个问题:

 if(ui->bt_replay->text()=="回放")
{
auto name=QFileDialog::getOpenFileName(,"","","pcap文件(*.pcap)");
QTextCodec *code = QTextCodec::codecForName("gb2312");//解决中文路径问题
string namestd = code->fromUnicode(name).data();
cout<<"convert gb2312:"<<namestd<<endl;
if(namestd!="")
{
lctrl.replay_dat(namestd);
ui->bt_replay->setText("退出回放");
lctrl.replay_stat=;
ui->lb_replay_stat->setText("加载数据");
}
}

对于路径中存在空格的,在网上查的解决方法是:path.replace(" ","\" \"");

结果试了不行,最后发现,fopen本身就支持带空格的文件名输入,不需要转换……

QT打开文件路径中含有中文和空格问题的更多相关文章

  1. maven的安装、路径配置、修改库文件路径和eclipse中的配置、创建maven工程。

    注:本文来源于:杨四郎2018  <maven的安装.路径配置.修改库文件路径和eclipse中的配置.创建maven工程> 一.maven的安装 首先,先到官网去下载maven.这里是官 ...

  2. Windows文件路径转换为java中可识别的文件路径的转义方法,(另附转义多种格式)

    ps:欢迎加qq好友:2318645572,交流学习 一:路径转化 Windows中的文件路径格式为 D:\eclipse\apache-tomcat-7.0.67\wtpwebapps\... Ja ...

  3. QT 打开文件对话框汇总

    Qstring fileName = QFileDialog::getOpenFileName(this, tr("open file"), " ",  tr( ...

  4. Qt打开文件对话框同时选中多个文件或单个文件

    Qt中打开单个文件 //str_path为文件路径 QString str_path = QFileDialog::getOpenFileName(this, tr("选择转码文件" ...

  5. Qt打开文件对话框

    项目中需要打开文件对话框,就查了一下,不得不说Qt的帮助文档做的真好,非常详细.要实现这个功能有两种方式,使用QFileDialog的静态方法,实例化QFileDialog对象. 基本算是照抄帮助文档 ...

  6. Qt打开文件QFileDialog

    //打开Pts文件按钮点击事件void AnalysisPtsDataTool201905::OnOpenFileButtonClick(){ qDebug()<<"open f ...

  7. QT打开文件或文件夹或网络地址

    打开文件或文件夹 如果是文件或文件夹 必须带file:/// 后面可以是文件(夹)的绝对路径 QDesktopServices::openUrl(QUrl("file:///C:/Docum ...

  8. Qt选择文件路径

    QString file_path = QFileDialog::getExistingDirectory(this, "请选择文件路径...", "./"); ...

  9. Qt获取文件路径、文件夹路径

    1.首先是选择文件 QString file_path = QFileDialog::getOpenFileName(this, "请选择文件路径...", "默认路径( ...

随机推荐

  1. Oracle记录类型(record)和%rowtype

    Oracle中的记录类型(record)和使用%rowtype定义的数据类型都是一种单行多列的数据结构,可以理解为一个具有多个属性的对象.其中属性名即为列名. 记录类型(record) 记录类型是一种 ...

  2. 利用MyFlash闪回丢失数据

          MyFlash is an open source tool released by Meituan-Dianping which can be used to flashback MyS ...

  3. 浅谈HashMap与线程安全 (JDK1.8)

    HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型.HashMap 继承自 AbstractMap 是基于哈希表的 Map 接口的实现,以 Key-Value 的形式存在,即 ...

  4. Action与Func 用法

    //vs2017 + framework4.6.2 //zip    https://github.com/chxl800/ActionFuncDemo //源文件git   https://gith ...

  5. 课时133.margintop失效原因(理解)

    我们之前讲过如果只有子元素设置了margin top而父元素没有边框则会跟着被顶下来的. 而我们怎么解决这个问题呢? 就是给父元素设置一个边框 而为什么我们在第二个浮动的盒子设置边框没有用呢?应为第一 ...

  6. 如何在HHDI中进行数据质量探查并获取数据剖析报告

    通过执行多种数据剖析规则,对目标表(或一段SQL语句)进行数据质量探查,从而得到其数据质量情况.目前支持以下几种数据剖析类型,分别是:数字值分析.值匹配检查.字符值分析.日期值分析.布尔值分析.重复值 ...

  7. ruby 反射机制常用方法

    1. 获取类的名称: .class 2. 获取超类的名称:.superclass 3. 获取类包含的模块:.class.included_modules 4. 检查是否为实例对象:.instance_ ...

  8. 自己用原生JS写的轮播图,支持移动端触屏滑动,面向对象思路。分页器圆点支持click和mouseover。

    自己用原生javascript写的轮播图,面向对象思路,支持移动端手指触屏滑动.分页器圆点可以选择click点击或mouseover鼠标移入时触发.图片滚动用的setInterval,感觉setInt ...

  9. 13 内建属性 _getattribute_ 内建函数

    1.内建属性 2.__getattribute__ 属性访问时拦截器 class Itcast(object): def __init__(self,subject1): self.subject1 ...

  10. php webservice 可能存在的坑

    场景: 今天在生产机器上调用webservice失败 报 ...failed to load external entity... wget一下地址发现报500错误  把wsdl去掉再wget 发现就 ...