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中只有“测试”。 帮助,请
答案 0 :(得分:3)
除了你应该在C风格的字符串(c:\\index.txt
)中转义反斜杠这一事实,你有以下顺序的问题:
// vvvvvvvvv
file.open(stderr, QIODevice::WriteOnly);
:
data = file.readAll();
// ^^^^
当您以只写方式打开文件然后尝试阅读时,您认为究竟会发生什么?您需要将其打开以便阅读,例如使用QIODevice::ReadOnly
或QIODevice::ReadWrite
。
最重要的是,您应该通过提供返回代码来检查所有失败函数的返回代码。您目前不知道file.open()
是否有效。
我也不相信你应该打开stderr
(这是一个真正的输出“设备”)来输入。您几乎肯定不会在该文件描述符上获得 中的任何实际数据,这可能是您输入为空的原因。
你需要退后一步,询问你想要实现的。例如,您是否尝试捕获进程发送到标准错误的所有内容?如果是这样,那就不会那样了。
如果您只是尝试阅读index.txt
文件,则表示您使用了错误的重载。完全删除stderr
参数:
file.open (QIODevice::ReadOnly);
如果您正在尝试做 else ,请将其添加到问题中。
答案 1 :(得分:2)
file.open(stderr, QIODevice::WriteOnly);
这会再次关闭文件,并以只写模式重新打开stderr流
您需要将其更改为
file.open(QIODevice::ReadOnly);
答案 2 :(得分:2)
QFile file("C:\index.txt");
在这里,您尝试打开一个名为C:index.txt
的文件,因为'\i'
已转换为i
。你想加倍反斜杠:
QFile file("C:\\index.txt");
答案 3 :(得分:0)
因为您从只写的文件中读取。