您现在的位置是:网站首页> C/C++

Qt 之进程间通信(QProcess)

  • C/C++
  • 2021-11-11
  • 963人已阅读
摘要
QProcess可以在应用程序内部与其它进程通信,或启动其它应用程序。与在终端机之类的命令输入窗口上使用名称和参数是一样的,可以使用QProcess提供的函数start()启动进程。可以注册QStringList处理进程后的参数。
版权声明:一去、二三里,未经博主允许不得转载。
命令行参数启动
说明
进程A-带参启动进程B
  1. 一般编写程序时,严格来说,启动外部程序,需要判断版本是debug还是release。否则,有可能会造成错误。
  2. 判断将要启动的进程是否存在,如果不存在,则启动;否则,不启动。
  3. 传参:这里我列举的是json格式。
实现
void onSendMessage() {    QString strExe("");    if (m_pProcess == NULL)        m_pProcess = new QProcess(this);#if defined(QT_DEBUG)    strExe = "ReceiveMessaged.exe";#   else    strExe = "ReceiveMessage.exe";#  endif    // 判断进程是否存在    QProcess tasklist;    tasklist.start("tasklist",                   QStringList() << "/NH"                   << "/FO" << "CSV"                   << "/FI" << QString("IMAGENAME eq %1").arg(strExe));    tasklist.waitForFinished();    QString strOutput = tasklist.readAllStandardOutput();    if (!strOutput.startsWith(QString("\"%1").arg(strExe)))    {        QJsonObject json;        json.insert("UserName", QStringLiteral("╰☆一去、二三里`"));        json.insert("Password", "123456");        QJsonDocument document;        document.setObject(json);        QByteArray byteArray = document.toJson(QJsonDocument::Compact);        QStringList arguments;        arguments << byteArray;        m_pProcess->startDetached(strExe, arguments);    } }

命令行读取
说明
进程B-命令行读取
  1. 在main函数中初始化QApplication以后,获取命令行参数。
  2. 命令行参数中包含当前程序的名称、接收的参数等信息。
实现
QStringList cmdLineArgs = QCoreApplication::arguments(); QMessageBox::information(NULL, QStringLiteral("ReceiveMessage"), cmdLineArgs.join(" "));
  • 1


Top