把文件内容读取出来让label显示,可label出来了文件内容却没有显示;代码如下:
#include<QApplication>
#include<QFile>
#include<QTextStream>
#include<QLabel>
#include<QTextCodec>
#include<stdio.h>
int main(int argc,char **argv)
{
QApplication app(argc,argv);
QLabel *label=new QLabel();
label->setGeometry(100,100,300,300);
QFile file("./1.txt");
file.open(QIODevice::ReadOnly | QIODevice::Text);
QTextCodec *code=QTextCodec::codecForName("utf8");
QTextStream stream(&file);
stream.setCodec(code);
label->clear();
while(!stream.atEnd())
{
label->setText(stream.readLine());
}
label->show();
return app.exec();
}
------解决方案--------------------
1. 检查 open 函数的返回值,确保文件正确打开
2. 反复 setText 的意图是什么?能确保你文件最后一行非空么?
------解决方案--------------------
简单修改下,还有不少可以完善的地方
- C/C++ code
#include <QtGui>int main (int argc, char **argv){ QApplication app (argc, argv); QLabel *label = new QLabel(); label->setGeometry (100, 100, 300, 300); QFile file ("./1.txt"); file.open (QIODevice::ReadOnly | QIODevice::Text);// QTextCodec *code = QTextCodec::codecForName ("utf8"); // 如果你的文件不是utf-8就不要乱设// stream.setCodec (code); // 否则中文是会打码的。即便这样也仍是不会让你打开中文文件名的 QTextStream stream (&file);// label->clear(); QString line; while (!stream.atEnd()) { line.append (stream.readLine()); // 要连接,否则替换到最后得到的是空白 line.append ("\n"); // 换行是不读的,要自己倒贴 } label->setText (line); label->setAlignment (Qt::AlignJustify); // 这是奖励 label->setWordWrap (true); label->setMargin (8); label->show(); return app.exec();}
------解决方案--------------------
呵呵,这些注释挺能说明问题。
把
QTextCodec *code = QTextCodec::codecForName ("utf8");
注释掉,如果认为楼主读的不是utf-8格式的文件呢?文件名 ./ 风格,典型的linux下的用法嘛 ^_^
而你提到的 "中文文件名的",似乎暴露出了你对QString与中文之间的问题不了解http://hi.baidu.com/cyclone/blog/item/9d7293130e5a498d6538dbf1.html
换行部分的处理,如果这样,反倒不如直接 readAll
------解决方案--------------------
file.open(QIODevice::ReadOnly | QIODevice::Text);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
return 3;
这3行代码必然导致到你看到的结果。将第一行删掉。