QT QProcess::readAllStandardOutput()中文乱码解决方法

本文介绍了解决QT中QProcess::readAllStandardOutput()导致中文乱码的方法。通过使用QString::fromLocal8Bit进行编码转换,可以正确显示中文字符。

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

QT QProcess::readAllStandardOutput()中文乱码解决方法

(2014-04-16 17:25:43)
QT5已经移除setCodecForTr等转编码的函数,所以需要用QString::fromStdString和QString::fromLocal8Bit等转换成QString


以下是示例代码


//包含的头文件都被新浪微博自动删除了,自己包含相应的头文件吧
#include 
#include 
#include 
#include 
#include 
#include 
 
 
using namespace std;
 
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QProcess pro;
    pro.start("demo.exe");
    pro.waitForFinished();
 
 
    string str1 = "111中文";
    //QString str = QString(QObject::tr(pro.readAllStandardOutput()));   //中文显示乱码
    //QString str = QString::fromStdString(pro.readAllStandardOutput()); //中文显示乱码
    QByteArray qba = pro.readAllStandardOutput();
    char* myChar = new char[qba.length()];
    for(int i=0; i i++)
    {
        myChar[i] = qba[i];
    }
    string str2 = string(myChar);
    delete []myChar;
    qDebug()<<QString::fromStdString(str1)         //中文显示正常
            <<QString::fromStdString(str1.c_str())  //中文显示正常
            <<QString::fromStdString(str2)         //中文显示乱码
            <<QString::fromLocal8Bit(str2.c_str())  //中文显示正常
            <<QString::fromLocal8Bit(qba);         //中文显示正常
 
 
    return a.exec();
}
### QProcess::startDetached 方法的默认参数解析 `QProcess::startDetached` 是 Qt 提供的一个静态方法,用于异步启动一个独立运行的进程。该方法不会等待子进程完成即可返回,并且即使父进程关闭也不会影响到已启动的子进程。 #### 函数签名 以下是 `QProcess::startDetached` 的几种重载形式: 1. **bool QProcess::startDetached(const QString &program, const QStringList &arguments)** 参数说明: - `program`: 需要执行的程序路径或名称。 - `arguments`: 传递给目标程序的一系列参数。 2. **bool QProcess::startDetached(const QString &commandLine)** 参数说明: - `commandLine`: 完整的命令行字符串,其中包含了程序及其参数。此方式适用于简单的场景,在某些平台上可能不如分开传参更可靠[^4]。 3. **bool QProcess::startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory)** 参数说明: - `program`: 执行的目标程序。 - `arguments`: 目标程序所需的参数列表。 - `workingDirectory`: 子进程的工作目录,默认情况下会继承当前工作目录。如果未指定,则使用调用者的当前工作目录[^3]。 4. **bool QProcess::startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory, qint64 *pid)** 参数说明: - `program`, `arguments`, 和 `workingDirectory` 如上所述。 - `pid`: 如果提供了一个指针变量地址,那么成功时将存储新创建进程的 ID 值;否则可以忽略这个参数[^2]。 当调用这些函数而省略部分可选参数时,它们会被赋予合理的默认值。例如对于第三个版本的方法来说,如果没有显式定义 `workingDirectory` ,则它通常被设为应用程序自身的初始工作路径或者环境中的默认位置[^1]。 另外需要注意的是,在 Windows 平台上由于 CMD 解析器的存在,有时直接利用字符串形式 (`const QString &commandLine`) 来表示整个指令可能会遇到兼容性和安全性方面的问题,因此推荐尽可能采用分离式的参数设定模式即第一个重载原型。 ```cpp #include <QCoreApplication> #include <QProcess> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // Example of using startDetached with default parameters. bool success = QProcess::startDetached("notepad.exe"); if (!success){ qDebug() << "Failed to launch Notepad."; } return a.exec(); } ``` 上述代码片段展示了如何仅通过指定程序名而不附加任何额外选项的情况下调用 `startDetached()` 。这里假设操作系统能够识别并定位名为 “notepad.exe” 的应用软件实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值