当前位置: 代码迷 >> QT开发 >> 资料内容无法显示
  详细解决方案

资料内容无法显示

热度:46   发布时间:2016-04-25 04:38:18.0
文件内容无法显示
把文件内容读取出来让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行代码必然导致到你看到的结果。将第一行删掉。
  相关解决方案