QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3564|回复: 9

Qt QString QFile 与汉字问题

[复制链接]
发表于 2009-12-17 14:38:58 | 显示全部楼层 |阅读模式
QFile cmdInfoTmp("cmdInfo.tmp");
    if (cmdInfoTmp.open(QIODevice::ReadOnly)) {
        QTextStream stream( &cmdInfoTmp );
        QString line;
        while ( !stream.atEnd() ) {
            line = stream.readLine();
            if(line.contains("成功创建")){
                QMessageBox::information(this, tr("info"), tr("have found the string"));
            }else{
                QMessageBox::information(this, tr("info"), tr("haven't' found the string"));
            }
        }
        cmdInfoTmp.close();
    }
    /*
    QString test("测试");
    if(test.contains("测")){
        QMessageBox::information(this, tr("info"), tr("haven found the string test"));
    }
    */
cmdInfo.tmp里面的内容如下:
项 {f2a062b0-ead1-11de-93dd-08002703cdb6} 成功创建。

就是从文件中读出的汉字在用QString 的contains判断的时候无效,有没有方法判断中文字符?  或者我写的不对?但是下面的字符串测试正常啊。还是因为Qt的字符编码和win下的GB2312不是匹配的?
发表于 2009-12-17 15:37:47 | 显示全部楼层
你指定了程序的编码么?QTextCodec
回复

使用道具 举报

 楼主| 发表于 2009-12-17 18:01:57 | 显示全部楼层
QTextCodec::setCodecForCStrings( QTextCodec::codecForName("GB2312") );
yes,这个解决问题
回复

使用道具 举报

 楼主| 发表于 2009-12-19 23:10:31 | 显示全部楼层
stream.setCodec("ISO-8859-1");// default Winxp code Vista code
其实用这句才是真管用,不过用了之后输出的字符就成乱码了,不过能RegExp字符串了
回复

使用道具 举报

发表于 2009-12-19 23:40:28 | 显示全部楼层
设置成这样的话,输出字符的时候需要再转换一次。
回复

使用道具 举报

 楼主| 发表于 2009-12-20 00:36:04 | 显示全部楼层
恩,完美了。
不过Qt不能与cmd交互这点实在难以忍受。Qt不能获取cmd命令执行输出的字符串。
回复

使用道具 举报

发表于 2009-12-20 00:43:06 | 显示全部楼层
当然能啊。
readAllStandardOutput
回复

使用道具 举报

 楼主| 发表于 2009-12-20 01:00:50 | 显示全部楼层
p.waitForStarted();
        p.waitForFinished();

哦,我忘记用这两句去等待进程执行完毕,结果提前结束了cmd进程,没得到输出结果。现在好了,黑框框也可以去掉了。
就纳闷Qt这么nb的东西怎么会不支持这一点....原来我用错了
回复

使用道具 举报

 楼主| 发表于 2009-12-20 01:01:22 | 显示全部楼层
QProcess p(0);
        p.start("route");
        p.waitForStarted();
        p.waitForFinished();
        //qDebug()<<QString::fromLocal8Bit(p.readAllStandardError());
        QMessageBox::information(this, tr("info"), p.readAllStandardError());

[ 本帖最后由 zy_sunshine 于 2009-12-20 01:04 编辑 ]
回复

使用道具 举报

发表于 2009-12-20 01:25:23 | 显示全部楼层
呵呵,qt的确很好用的。不过如果是别的地方用,waitForFinished()应该加个默认超时,不然要是调用的程序僵死的话,会导致你的程序也僵死的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-3-29 14:24 , Processed in 0.049874 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表