QLabel* codeLabel = new Qlabel;
QFile file("C:\index.txt");
file.open(stderr, QIODevice::WriteOnly);
QByteArray data;
data = file.readAll();
codeLabel->setText("test"+QString(data));
file.close();
那么QLabel中就只有“测试”了。请帮忙
除了您应该在 C 风格的字符串 ( c:\\index.txt
) 中转义反斜杠这一事实之外,您还遇到了以下序列的问题:
// vvvvvvvvv
file.open(stderr, QIODevice::WriteOnly);
:
data = file.readAll();
// ^^^^
当您以只写方式打开文件然后尝试读取它时,您究竟认为会发生什么?您需要打开它才能阅读,例如 withQIODevice::ReadOnly
或QIODevice::ReadWrite
。
最重要的是,你应该通过给你一个返回码来检查所有失败的函数的返回码。您目前不知道是否file.open()
有效。
我也不相信您应该打开stderr
(这实际上是一个输出“设备”)进行输入。您几乎可以肯定永远不会从该文件描述符中获得任何实际数据,这可能就是您的输入为空的原因。
你需要退后一步,问问你想要实现什么。例如,您是否试图捕获您的流程发送到标准错误的所有内容?如果是这样,它不会那样工作。
如果您只是想读取index.txt
文件,则说明您使用了错误的重载。完全删除stderr
参数:
file.open (QIODevice::ReadOnly);
如果这是您要尝试做的其他事情,请将其添加到问题中。
QFile file("C:\index.txt");
在这里您尝试打开一个名为:C:index.txt
因为'\i'
被转换为i
. 你想加倍你的反斜杠:
QFile file("C:\\index.txt");
file.open(stderr, QIODevice::WriteOnly);
这将再次关闭文件并以只写模式使用 stderr 流重新打开
你会想把它改成
file.open(QIODevice::ReadOnly);
因为您从打开的文件中读取write-only。