qt - 如何将命令行参数传递给 QT 中已经打开的程序?

标签 qt command-line

我想知道如何将命令行参数传递给已经打开的程序。因此,用户运行“backup.exe -job awef”,backup.exe 识别出已经打开的进程并将参数传递给已打开的进程,以便用户可以命令程序从命令行或快捷方式执行他们想要的操作在 window 里。
谢谢!

最佳答案

您可以根据 https://doc.qt.io/archives/qtextended4.4/qtopiadesktop/qtsingleapplication.html#QtSingleApplication 使用 QtSingleApplication 处理 messageReceived 上的命令行参数来实现您的目标。

在应用程序开始时,您需要检查是否可以将带有命令行参数的 sendMessage 发送到已运行的实例,然后退出。否则,您将继续启动您的应用程序,如下所示

int main(int argc, char* argv[])
{
  QtSingleApplication app("MySingleInstance", argc, argv);

  // try to send commandline arguments
  if(app.sendMessage(app.arguments().join("$")))
  {
        return 0;
  }

  /* connect your messageRecieved signal to slot
  SomeClass::slotLoadCommandLine to be able to handle 
  the commandline arguments from sendMessage*/
  QObject::connect(qApp, SIGNAL(messageReceived(QString)),
                   SomeClass, SLOT(slotLoadCommandLine(QString)));

   //start your application
   return app.exec();
}

编辑
  • 上面的解决方案适用于 Qt4,如果您使用的是 Qt5,则需要使用
    改为 SingleApplication

    https://forum.qt.io/topic/22460/solved-qtsingleapplication-and-qt-5/5

    How to use QtSingleApplication?
  • 另一种选择是使用套接字(例如 QTcpSocket)。但是您将需要创建另一个应用程序来转发您的命令行参数.. 请参阅此示例 http://www.bogotobogo.com/Qt/Qt5_QTcpSocket_Signals_Slots.php
  • 关于qt - 如何将命令行参数传递给 QT 中已经打开的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39421166/

    相关文章:

    python - 如何使用 PySide 向 QTableWidget 添加数据

    c++ - 运行外部 .exe 并从中接收返回值

    python-2.7 - 如何通过输入脚本名称来执行 Python 脚本?

    java - 如何检查数组中没有输入任何字母?

    c++ - QTableWidget with setItem 不显示数据

    qt - ubuntu 16 无法安装 robomongo

    python - 当直接从文件而不是 QImage 制作时,PyQt 中的 QPixmap 无法正确清理

    c++ - Qt 5.8 和 Pdf.js 错误

    linux - 从 Linux 命令行向 CMake 服务器发送请求

    powershell - 仅获取目录名称