2017-02-18 24 views
0

Я пытаюсь создать простую программу QT, которая позволяет мне запускать avrdude без использования команд командной строки.Qprocess и avrdude

Я видел, что с Qprocess легко запустить любую программу, и я успешно пробовал простую программу, такую ​​как Explorer Word и другие.

Проблема в том, что когда я пытаюсь открыть cmd.exe, ничего не происходит, даже если я пытаюсь передать пакетный файл, содержащий всю информацию, чтобы запустить правильно avrdude.

Вот код

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

Пожалуйста, измените свой пост, чтобы показать, как вы пройти пакетный файл '' cmd.exe' в QProcess'. Вы можете использовать пакетный файл, который содержит «echo» Hello. »« Только для формирования воспроизводимого образца. – Scheff

+0

спасибо за ваш ответ, я отредактировал мой код, так как вы можете видеть, что я прошу открыть cmd.exe, а затем я хочу передать абсолютный путь к моему пакетному файлу. В моей версии абсолютный путь задается qstring, который сохраняет путь, полученный из Qfiledialog. – Deid

+0

Выглядит неплохо с первого взгляда. Открывает и закрывает 'cmd.exe' или остается открытым. В первом случае вы можете использовать '/ K' в качестве первого аргумента. Я просто нашел это, набрав «help cmd» в «cmd.exe». – Scheff

ответ

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. Если 1 заменен на 0, то используется альтернативный код с полным путем. (Во время сеанса чата мы рассмотрели особые проблемы с запуском cmd.exe.) В моей системе обе альтернативы тоже.

(Моя система: Windows 10, VS2013, Qt 5.7)