• 1537阅读
  • 12回复

关于拖拽获取文件信息的疑问 [复制链接]

上一主题 下一主题
离线lwei24
 

只看楼主 倒序阅读 楼主  发表于: 2021-01-28
各位大佬,请问在实现拖拽事件时,为什么拖拽获取的文件名不是中文呢?代码如下:
void myWidget::dragEnterEvent(QDragEnterEvent *event)
{
    if(event->mimeData()->hasFormat("text/uri-list"))
    {
        event->acceptProposedAction();
        event->accept();
    }
    else
    {
        event->ignore();
    }
}

void myWidget::dropEvent(QDropEvent *event)
{
    m_strPathList.clear();
    QList<QUrl> urls = event->mimeData()->urls();
    foreach(QUrl url, urls)
    {
        QString strPath = url.toLocalFile();
        qDebug()<<"strPath:"<<strPath;
     }

}
我拖拽的文件是:C:/Users/Public/Pictures/Sample Pictures/企鹅.jpg
打印的路径:strPath: "C:/Users/Public/Pictures/Sample Pictures/Penguins.jpg"
为什么拖拽的文件名是中文时,拖拽获取出来是英文呢?请问这个问题要怎么才能获取出准确的文件名呢?


离线clickto

只看该作者 1楼 发表于: 2021-01-28
换个文件,换个目录,你再试试看!!
离线fsu0413

只看该作者 2楼 发表于: 2021-01-30
找到C:/Users/Public/Pictures/Sample Pictures 这个文件夹,显示隐藏文件,然后删掉里面的desktop.ini,刷新之后就看到原来的文件名了,应该是Penguins.jpg
这玩意是Windows资源管理器搞出来的,包括“用户”这个文件夹也是
离线lwei24

只看该作者 3楼 发表于: 2021-02-09
回 clickto 的帖子
clickto:换个文件,换个目录,你再试试看!!
 (2021-01-28 20:05) 

换了,它还是拖拽后显示英文。如果路径是中文的,它才会显示中文的。这个是因为系统语言的环境导致的吗?但我看了一下,我设置的是中文环境,有点不解
离线lwei24

只看该作者 4楼 发表于: 2021-02-09
回 fsu0413 的帖子
fsu0413:找到C:/Users/Public/Pictures/Sample Pictures 这个文件夹,显示隐藏文件,然后删掉里面的desktop.ini,刷新之后就看到原来的文件名了,应该是Penguins.jpg
这玩意是Windows资源管理器搞出来的,包括“用户”这个文件夹也是 (2021-01-30 09:41) 

请问这个desktop.ini是自动生成的吗?但我拖拽的文件名是企鹅.jpg.要怎么才能获取出准确的文件名呢?总不能我拖拽一次前,就去删除desktop.ini吧?
离线fsu0413

只看该作者 5楼 发表于: 2021-02-11
回 lwei24 的帖子
lwei24:请问这个desktop.ini是自动生成的吗?但我拖拽的文件名是企鹅.jpg.要怎么才能获取出准确的文件名呢?总不能我拖拽一次前,就去删除desktop.ini吧? (2021-02-09 13:58) 

这个desktop.ini是Windows生成的
文件名百分百不是“企鹅.jpg”是“Penguins.jpg”

实在不信的话,用命令提示符进文件夹里dir一下看看
离线fsu0413

只看该作者 6楼 发表于: 2021-02-11
或者换一个没有desktop.ini文件的路径试试看,肯定拖拽的是什么就是什么
离线lwei24

只看该作者 7楼 发表于: 2021-02-18
回 fsu0413 的帖子
fsu0413:这个desktop.ini是Windows生成的
文件名百分百不是“企鹅.jpg”是“Penguins.jpg”
实在不信的话,用命令提示符进文件夹里dir一下看看
....... (2021-02-11 08:25) 

不是说不信,是说,用肉眼看到的是企鹅.jpg,但是拖拽后获取的文件名却是Penguins.jpg。除了删除那个desktop.ini,就没有其他办法了吗?因为想做一个功能,就是拖拽到指定区域,获取出该拖拽出来的文件名。而一般人用起来,是不会知道为什么拖拽的原理,只看到拖拽前后文件名不一致。因此,想再请教一下,除了删除desktop.ini,有什么其他好办法,准确获取它的文件名吗?
离线fsu0413

只看该作者 8楼 发表于: 2021-02-19
回 lwei24 的帖子
lwei24:不是说不信,是说,用肉眼看到的是企鹅.jpg,但是拖拽后获取的文件名却是Penguins.jpg。除了删除那个desktop.ini,就没有其他办法了吗?因为想做一个功能,就是拖拽到指定区域,获取出该拖拽出来的文件名。而一般人用起来,是不会知道为什么拖拽的原理,只看到拖拽前后文件名不一 .. (2021-02-18 09:33) 

准确文件名就是Penguins.jpg。纠结这个问题其实没用,你应该问问Windows为什么要在资源管理器中加这么一个功能
要是非得获取这玩意,就只能读取desktop.ini,找里面有一条LocalizedResourceName,这玩意指向一个dll文件,可以读dll去解析。解析方法我不知道,可以去网上查查,而且解析完毕之后的文件路径和真实路径并不一致。
离线lwei24

只看该作者 9楼 发表于: 2021-02-19
回 fsu0413 的帖子
fsu0413:准确文件名就是Penguins.jpg。纠结这个问题其实没用,你应该问问Windows为什么要在资源管理器中加这么一个功能
要是非得获取这玩意,就只能读取desktop.ini,找里面有一条LocalizedResourceName,这玩意指向一个dll文件,可以读dll去解析。解析方法我不知道,可以去网上查查,而 .. (2021-02-19 08:31) 

不是说纠结这个问题。如果你是软件的使用者,拖拽进去的是企鹅.jpg,难道不会对拖拽后变成Pengunins.jpg有疑问吗?再说了,很多人在使用的时候,是不会去深究为什么的。我们做软件的不是要把这些问题处理好,难道你很希望别人用你的软件后有大量投诉吗?
离线fsu0413

只看该作者 10楼 发表于: 2021-02-20
回 lwei24 的帖子
lwei24:不是说纠结这个问题。如果你是软件的使用者,拖拽进去的是企鹅.jpg,难道不会对拖拽后变成Pengunins.jpg有疑问吗?再说了,很多人在使用的时候,是不会去深究为什么的。我们做软件的不是要把这些问题处理好,难道你很希望别人用你的软件后有大量投诉吗? (2021-02-19 13:50) 

这种问题完全可以抛给操作系统啊。。。。
反正我之前做蓝牙打电话相关的内容的时候,也会遇到各种各样的手机,发来的数据还有缺东西的,东西不对的,难道都要在我这边workaround吗?不可能的。
离线clickto

只看该作者 11楼 发表于: 2021-02-20
想想也知道,系统不会智能到,给你中英文文件智能翻译啊!这种情况只出现在系统相关的几个文件夹及文件中,相当于做个软连接,所以我说,换个目录,换个文件试试看。比如d盘下,123.jpg,应该不会出现这种情况。
离线lwei24

只看该作者 12楼 发表于: 2021-02-20
回 fsu0413 的帖子
fsu0413:这种问题完全可以抛给操作系统啊。。。。
反正我之前做蓝牙打电话相关的内容的时候,也会遇到各种各样的手机,发来的数据还有缺东西的,东西不对的,难道都要在我这边workaround吗?不可能的。 (2021-02-20 10:06) 

快速回复
限100 字节
 
上一个 下一个