当前位置: 代码迷 >> QT开发 >> Qt中QImage.load()如何加载中文文件名的图片
  详细解决方案

Qt中QImage.load()如何加载中文文件名的图片

热度:107   发布时间:2016-04-25 04:39:41.0
Qt中QImage.load()怎么加载中文文件名的图片?
先获取指定目录下的文件名(这个文件名已经包含了这个指定目录)

  QList <QString> picturelistbiao;

  filters<<"*.jpg"<<"*.png"<<"*.bmp"<<"*.gif";
  QDirIterator iter("/home/sql/picture",filters,dir.filter(), QDirIterator::Subdirectories);
  int im=0;
  while (iter.hasNext()) {
  iter.next();
  QFileInfo info = iter.fileInfo();
  if (info.isFile()) {
  QString name;
  name=QString("%1. %2").arg(im+1).arg(info.baseName());
  ui->listWidget->addItem(name);
  picturelistbiao.append(info.filePath());
  im++;
  }
  }
  int picturenum=ui->listWidget->count();

然后根据文件名加载显示图片

  picturem++;
  QByteArray ba=picturelistbiao[picturem].toLatin1();
  na=ba.data();

  image.load(na);********************
  pixmap=QPixmap::fromImage(image.scaled(size(),Qt::KeepAspectRatio));
  spixmap=pixmap.scaled(780,370,Qt::KeepAspectRatio);
  ui->label->setPixmap(spixmap);


如果文件名不含中文字符,就正常。含有中文字符的时候图片就显示不了了,提示
QImage::scaled: Image is a null image
QPixmap::scaled: Pixmap is a null pixmap

帮忙解决一下!!谢谢


------解决方案--------------------
1楼+1
编码问题,找不到相应的路径。。。

你可以到网上搜一下“Qt中怎样支持中文”,最经典的就是三句话,写上就ok啦
------解决方案--------------------
我把楼上的三句话写出来,混积分的。。
QTextCodec *codec = QTextCodec::codecForName("UTF-8"); //获取系统编码
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
不过图片文件最好不要用中文,目录也最好不要用中文。如果你的软件是用来发行的,要不以后会陆续出现一些问题的,比如打补丁包的时候,中文的文件名处理就比英文的麻烦。
  相关解决方案