gpt4 book ai didi

c++ - Qt - 为什么无法使用带有从 FileDialog 获取的目录的 QFile 读取文件?

转载 作者:行者123 更新时间:2023-11-30 01:02:47 26 4
gpt4 key购买 nike

我正在使用 QFile 在 Qt 5.12 上读取文件。我尝试从我的计算机读取文件,但是当我使用从 FileDialog 读取的目录时,它有“file:///”前缀。谁能告诉我为什么会出错以及如何使用从 FileDialog 获取的 URL?

谢谢!

QFile file("C:/Users/HuuChinhPC/Desktop/my_txt.txt"); // this work
//QFile file("file:///C:/Users/HuuChinhPC/Desktop/my_txt.txt"); //didn't work
QString fileContent;
if (file.open(QIODevice::ReadOnly) ) {
QString line;
QTextStream t( &file );
do {
line = t.readLine();
fileContent += line;
} while (!line.isNull());

file.close();
} else {
emit error("Unable to open the file");
return QString();
}

最佳答案

FileDialog 返回一个 url,因为在 QML 中使用了该类型的数据,但 QFile 不是,所以您必须将 QUrl 转换为使用过的字符串 toLocalFile() :

Q_INVOKABLE QString readFile(const QUrl & url){
if(!url.isLocalFile()){
Q_EMIT error("It is not a local file");
return {};
}
QFile file(url.toLocalFile());
QString fileContent;
if (file.open(QIODevice::ReadOnly) ) {
QString line;
QTextStream t( &file );
do {
line = t.readLine();
fileContent += line;
} while (!line.isNull());
file.close();
return fileContent;
} else {
Q_EMIT error("Unable to open the file");
return {};
}
}

*.qml

var text = helper.readFile(fileDialog.fileUrl)
console.log(text)

关于c++ - Qt - 为什么无法使用带有从 FileDialog 获取的目录的 QFile 读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55465246/

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