gpt4 book ai didi

qt - 为什么目录字符串丢失 '/' 会返回 Qt 中的父 qdir

转载 作者:行者123 更新时间:2023-12-04 20:52:55 24 4
gpt4 key购买 nike

这可能是一个错误。请阅读 webclectic 回答。

如果 QFileInfo(filename) 丢失 '/',QDir::absolutePath 将返回父字符串。像下面的代码。

QFileInfo file("e:/QtExample/mytest/out/res/res1/");
QFileInfo file_no("e:/QtExample/mytest/out/res/res1");

QDir dirFile = file.absoluteDir();
QDir dirFile_no = file_no.absoluteDir();

QString strDirFile = dirFile.absolutePath(); //"E:/QtExample/mytest/out/res/res1
QString strDirFile_no = dirFile_no.absolutePath(); //"E:/QtExample/mytest/out/res

我用我的 QTreeView 找到了它。我的代码将从 QTreeView::clicked 信号调用插槽
connect(ui.m_pView,SIGNAL(clicked(QModelIndex)),this,SLOT(myClicked(QModelIndex)));

该插槽将获取 QModelIndex,然后我使用 QFileSystemMode::fileInfo 获取 QFileInfo。
QFileInfo rFileInfo = m_model.fileInfo(index);
QDir absDir = rFileInfoDir.absoluteDir();

但是QFileInfo的返回总是返回“e:/QtExample/mytest/out/res/res”,所以如果我调用QFileInfo::absoluteDir获取目录,该目录是“res1”的父目录。所以我会得到错误的entrylst来自我的希望目录。

我应该在 absoluteFilePath() 之后添加“/”以获得正确的 QDir 吗?

为什么 strDirPath 等于“E:/QtExample/mytest/out/res/res1”,但 rDir 会列出“res”目录条目列表?
//rFileInfoDir == E:/QtExample/mytest/out/res/res1
QString strDirPath = rFileInfoDir.absoluteFilePath();
QDir rDir = rFileInfoDir.absoluteDir();

最佳答案

如果你深入absoluteDir()函数调用你会明白为什么会发生这种情况。在 Windows 中 fileName函数在 qfsfileengine_win.cpp叫做。在这个函数中有这个代码部分:

if (file == AbsolutePathName) {
int slash = ret.lastIndexOf(QLatin1Char('/'));
if (slash < 0)
return ret;
else if (ret.at(0) != QLatin1Char('/') && slash == 2)
return ret.left(3); // include the slash
else
return ret.left(slash > 0 ? slash : 1);
}

您可以看到它返回了最后一个分隔符左边的字符串部分。我不知道这是期望的行为还是错误。也许你可以发出 Qt为此的错误。关于这个问题,文档并不清楚。

关于qt - 为什么目录字符串丢失 '/' 会返回 Qt 中的父 qdir,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8353314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com