当前位置: 代码迷 >> QT开发 >> QT下調用system()問題,该怎么处理
  详细解决方案

QT下調用system()問題,该怎么处理

热度:80   发布时间:2016-04-25 03:25:36.0
QT下調用system()問題
我在qt下調用system():system("md5sum 证书.txt > 证书.txt.md5"); 目的是生成 证书.txt 的md5文件? 但是生成之後的md5文件卻是 “??书.txt.md5” 這樣的  求解???
------解决方案--------------------
试下system(QString("md5sum 证书.txt > 证书.txt.md5").toLocal8Bit().constData());
或者用QProcess类:
QProcess cmd;
cmd.setNativeArguments("md5sum 证书.txt > 证书.txt.md5");
cmd.start("cmd.exe");
cmd.waitForFinished();
------解决方案--------------------
明显是编码问题。

#include <QTextCodec>
QTextCodec *codec = QTextCodec::codecForName("System");
    //获取系统编码
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);

------解决方案--------------------
设置utf-8
------解决方案--------------------
引用:
明显是编码问题。

#include <QTextCodec>
QTextCodec *codec = QTextCodec::codecForName("System");
    //获取系统编码
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);


1、在Qt中,这3行代码的用法,在99.9%以上情况下都是不正确的。
2、即使楼主的问题真的是编码问题,也和这3行代码没有任何关系。因为system()不是Qt中的函数。调整Qt内部的编码对其没有任何影响。
------解决方案--------------------
我觉得楼主可以先试试在命令行里面不用中文,把文件名改成英文文件名,如果那样没有问题的话,估计是源文件的编码问题,可以在源文件上点击右键,选择“保存时添加UTF-8BOM”试试。
------解决方案--------------------
引用:
上一下代碼吧
void MainWindow::on_pushButton_2_clicked()
{
    char *ch1, *ch2;
    QString str = "md5sum \"你的时间\" > \"你的时间.md5\"";
    QByteArray ba = str.toLocal8Bit();
    ch1 = ba.data();
    QString str2 = "md5sum \"证书用\" > \"证书用.md5\"";
    QByteArray ba2 = str2.toLocal8Bit();
    ch2 = ba2.data();
    system(ch1);
    system(ch2);
}
這兩個文件都是臨時創建的測試文件,隨機起的名字。一個正常一個不正常。截圖是生成之後的結果!

不要用QString/QByteArray中转,直接将 "...." 字符串作为system的参数。

如果不正常,则不是Qt的问题。
------解决方案--------------------
估计是lz你的系统使用字库问题,看你的打的字都一堆繁体
------解决方案--------------------
要不你试试用宏包起来,我也是刚解决的。
QString str =  QStringLiteral("md5sum \"你的时间\" > \"你的时间.md5\""); 
------解决方案--------------------
还是编码的问题吧,跟具体的字没关系,字符串里面有双数中文字就可以,单数中文字就不行,我之前碰到过
------解决方案--------------------
我用Qt4.8.4在Windows下用下面这段代码没有出现乱码:
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
    QString strCmd = "echo 证书用>证书用.txt";
    system(strCmd.toStdString().c_str());
  相关解决方案