Qprocess和avrdude

时间:2017-02-18 15:57:46

标签: qt qprocess avrdude

我试图创建一个简单的QT程序,允许我在不使用命令行操作的情况下启动avrdude。

我看到Qprocess很容易启动任何类型的程序,我尝试使用Explorer Word和Others等简单程序。

问题是当我尝试打开cmd.exe时没有任何反应,即使我尝试传递包含所有信息的批处理文件以正确启动avrdude。

这是代码

QProcess *process = new QProcess(this);
process->startDetached("cmd.exe",QStringList()<<"C:/avrdude/avr.bat"); 

1 个答案:

答案 0 :(得分:1)

我编写了一个最小示例应用程序,该应用程序显示如何使用cmd(在按钮单击时)使用命令启动QProcess::startDetached()

// standard C++ header:
#include <iostream>

// Qt header:
#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QProcess>

int main(int argc, char **argv)
{
  // main application
#undef qApp // undef macro qApp out of the way
  QApplication qApp(argc, argv);
  QMainWindow qWin;
  QPushButton qBtn(QString::fromLatin1("Start cmd"));
  QObject::connect(&qBtn, &QPushButton::clicked,
    [](bool) {
      bool ret = QProcess::startDetached(
#if 1 // let Windows search for cmd.exe in %PATH%
        QString::fromLatin1("cmd.exe"),
#else // define exact path of cmd.exe
        QString::fromLatin1("C:\\Windows\\system32\\cmd.exe"),
#endif // 1
        QStringList()
        << QString::fromLatin1("/K")
        << QString::fromLatin1("echo Hello"));
      std::cout << "QProcess::startDetached():"
        << (ret ? "OK." : "Failed!") << std::endl;
    });
  qWin.setCentralWidget(&qBtn);
  qWin.show();
  return qApp.exec();
}

Qt项目文件留作练习。 (对不起,我使用了CMake。)

请注意#if 1。如果10替换,则使用具有完整路径的替代代码。 (在聊天会话期间,我们检查了启动cmd.exe时的特殊问题。)在我的系统上,两种选择也都有。

(我的系统:Windows 10,VS2013,Qt 5.7)