C++ 命令行关闭,尽管使用了QProcess::startDetached()

C++ 命令行关闭,尽管使用了QProcess::startDetached(),c++,qt,qt4,qprocess,C++,Qt,Qt4,Qprocess,我正试图通过Qt应用程序中cmd.exe中的批处理文件打开服务器。尽管我使用QProcess::startDetached()来启动命令行,但它会在启动后立即关闭。服务器正在启动,但进程没有“服务”,而是被终止。这是我的密码: void DICOMReceiver::startReceiver() { QProcess receiver; boost::filesystem::path dbDir = boost::filesystem::absolute(databaseDir

我正试图通过Qt应用程序中cmd.exe中的批处理文件打开服务器。尽管我使用QProcess::startDetached()来启动命令行,但它会在启动后立即关闭。服务器正在启动,但进程没有“服务”,而是被终止。这是我的密码:

void DICOMReceiver::startReceiver()
{
    QProcess receiver;
    boost::filesystem::path dbDir = boost::filesystem::absolute(databaseDirectory.toStdString());
    receiver.startDetached("cmd.exe", QStringList() << "/c" <<
                           "dcmrcv.bat" << "AETitle:11112" << "-dest " << dbDir.string().c_str());
    receiver.waitForStarted();
}
void DICOMReceiver::startReceiver()
{
处理接收机;
boost::filesystem::path dbDir=boost::filesystem::absolute(databaseDirectory.toStdString());
receiver.startDetached(“cmd.exe”,QStringList())
  • startDetached
    是一个静态函数。您不需要流程实例

  • 您应该将一个工作目录传递到
    startDetached
    。据我所知,它“关闭”,因为批处理文件在查找它的地方不存在

  • < >代码> WaFiFistAdTrand(<)/Cudio>调用是一个NOP,因为 StutoStutaby方法不知道关于您的代码>接收器/COD>实例。您只写了混淆的C++欺骗您。在使用QT时,没有办法等待分离的进程启动。分离的进程是火灾和忘记。< /P> < /LI>
  • 不要使用
    waitForXxx
    方法,因为它们会阻塞线程,并使UI无响应。请使用信号插槽连接并编写异步代码

  • 因此,您的方法应固定如下:

    void DICOMReceiver::startReceiver()
    {
      boost::filesystem::path dbDir =
        boost::filesystem::absolute(databaseDirectory.toStdString());
      // FIXME
      const QString batchPath = QStringLiteral("/path/to/the/batch/file");
      QProcess::startDetached("cmd.exe", QStringList() << "/c"
                              << "dcmrcv.bat" << "AETitle:11112" << "-dest "
                              <<< dbDir.string().c_str(), batchPath);
    }
    
    void DICOMReceiver::startReceiver()
    {
    boost::filesystem::path dbDir=
    boost::filesystem::absolute(databaseDirectory.toStdString());
    //修理工
    常量QString batchPath=qstringlateral(“/path/to/the/batch/file”);
    
    QProcess::startDetached(“cmd.exe”,QStringList())感谢您的回答,但它在启动后仍会立即关闭。我看到服务器的输出在屏幕上快速移动,然后它消失了。我也尝试在没有其他参数的情况下启动它,但这也不是问题。当我只启动cmd.exe时,它就工作了(即使是我的第一个版本)这个问题不是用你的代码而是用早期的批处理文件来代替的。用一个哑批文件来简单地显示它的参数,在结尾处做一个<代码>暂停>代码>。然后慢慢地开始从代码< DCMRCV.BAT</代码>中添加东西。它真正调试101,在这一点上与Qt或C++无关。这对我来说是合乎逻辑的,因为当我在cmd.exe中手动调用批处理文件时,它不会关闭,当我创建指向它的链接时,它也不会关闭,为它提供所需的参数,然后每次双击都运行链接。使用QProcess时,它只是关闭。但我会尝试一下。谢谢你的回答。其中一个参数是-dest Directory。我处理了我的问题t作为两个参数。这是一个错误…@El_-Mewo-See,一个虚拟批处理文件会向您展示这一点。这是一种调试技术,有时非常方便:)