如何在Qt Symbian中保存文件为中文文件名

本文介绍在Symbian平台使用Qt进行图片保存时遇到的中文文件名无法保存的问题及其解决办法。主要原因是Qt默认使用Unicode编码与Symbian系统本地使用的UTF-8编码不一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

如果在Symbian平台中使用如下代码,想将当前操作的一个图片保存

QString fileName=QFileDialog::getSaveFileName();
 QPixmap *pm=new QPixmap(800,400);
 pm->save(fileName);
 delete pm;

如果在弹出的对话框中,利用手机输入法输入文件名时,会出现中文名无法保存的问题。将图片保存部分代码换成普通的文件处理

QFile file;
file.setFileName(fileName);
file.open(QIODevice::WriteOnly);
file.close();

同样碰到中文名无法保存的问题。


分析

这种情况一般是由字符串的编码引起,Qt内部使用的编码格式是Unicode的,可能在两个地方传递的不是Unicode编码

  • 文件选择框读入的字符串
  • 文件保存到磁盘时的字符串

要测读入的字符串是否为Unicode只需通过,QLabel或者QPushButton的setText(fileName)函数,如能正确显示则表示读入的文件名是正常的。经测试是第二步有问题,因为Symbian本地文件名使用的是UTF-8。

解决

Qt中用于控制读入和写出文件系统时的字符编码由QTextCodec::setCodecForLocale()所决定。在symbian中,只需在程序中调用

QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

即可


code example

#include <QtGui>
 
class MyWidget:public QWidget{
    Q_OBJECT
public:
    MyWidget(QWidget *parent=0);
protected slots:
   void buttonclick(); 
private:
    QPushButton *pb;
};
 
MyWidget::MyWidget(QWidget *parent)
:QWidget(parent){
    pb=new QPushButton(this);
    QVBoxLayout *vbox=new QVBoxLayout(this);
    vbox->addWidget(pb);
    connect(pb,SIGNAL(clicked()),this,SLOT(buttonclick()));
}
 
void MyWidget::buttonclick(){
    QString fileName=QFileDialog::getSaveFileName();
#if 1
    QPixmap *pm=new QPixmap(800,400);
    pm->save(fileName);
    delete pm;
#else
    QFile file;
    file.setFileName(fileName);
    file.open(QIODevice::WriteOnly);
    file.close();
#endif
    pb->setText(fileName);
}
 
int main(int argc,char *argv[]){
    QApplication app(argc,argv);
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
    QMainWindow mw;
    mw.setCentralWidget(new MyWidget(&mw));
    mw.showMaximized();
    return app.exec();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值