2
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中就只有“测试”了。请帮忙

4

4 回答 4

3

除了您应该在 C 风格的字符串 ( c:\\index.txt) 中转义反斜杠这一事实之外,您还遇到了以下序列的问题:

//                           vvvvvvvvv
file.open(stderr, QIODevice::WriteOnly);
:
data = file.readAll();
//          ^^^^

当您以只写方式打开文件然后尝试读取它时,您究竟认为会发生什么?您需要打开它才能阅读,例如 withQIODevice::ReadOnlyQIODevice::ReadWrite

最重要的是,你应该通过给你一个返回码来检查所有失败的函数的返回码。您目前不知道是否file.open()有效。

我也不相信您应该打开stderr(这实际上是一个输出“设备”)进行输入。您几乎可以肯定永远不会从该文件描述符中获得任何实际数据,这可能就是您的输入为空的原因。

你需要退后一步,问问你想要实现什么。例如,您是否试图捕获您的流程发送到标准错误的所有内容?如果是这样,它不会那样工作。

如果您只是想读取index.txt文件,则说明您使用了错误的重载。完全删除stderr参数:

file.open (QIODevice::ReadOnly);

如果这是您要尝试做的其他事情,请将其添加到问题中

于 2013-09-19T11:47:05.673 回答
2
QFile file("C:\index.txt");

在这里您尝试打开一个名为:C:index.txt因为'\i'被转换为i. 你想加倍你的反斜杠:

QFile file("C:\\index.txt");
于 2013-09-19T12:08:38.980 回答
2
file.open(stderr, QIODevice::WriteOnly);

这将再次关闭文件并以只写模式使用 stderr 流重新打开

你会想把它改成

file.open(QIODevice::ReadOnly);
于 2013-09-19T11:48:32.647 回答
0

因为您从打开的文件中读取write-only

于 2013-09-19T11:46:48.467 回答