2015-06-01 4 views
0

Я пытаюсь выполнить программу в Qt Creator, где я хочу обновить файл .hex для arduino. Я уже делал эту программу на C#, но у меня возникают некоторые проблемы при вызове avrdude в QT. Я пробовал два варианта:Проблема при использовании процесса windows в Qt

Моя первая попытка:

process = new QProcess(this); 
process->start("avrdude -Cavrdude.conf.txt -v -v -v -v -patmega328p -arduino -PCOM7 -b115200 -D -Uflash:w:Blink.cpp.hex:i", 0); 
process->waitForFinished(-1); 

QByteArray stdout = process.readAllStandardOutput(); 
QByteArray stderr = process->readAllStandardError(); 

Моя вторая попытка:

QString exePath = "avrdude"; 
QString arguments = "-Cavrdude.conf.txt -v -v -v -v -patmega328p -carduino -PCOM7 -b115200 -D -Uflash:w:Blink.cpp.hex:i"; 
#ifdef Q_OS_WIN32 
ShellExecuteW(NULL, NULL, (LPCWSTR)exePath.toStdWString().data(), (LPCWSTR)arguments.toStdWString().data(), NULL, SW_HIDE); 
#endif 

Я хотел бы знать, если кто имеет какие-либо идеи, почему мой код не делает ничего , или какое-то решение, которое я могу использовать.

ответ

0

находится в пути avrdude? Если это не так, вы можете вызвать setWorkingDirectory перед выполнением процесса или добавить его в путь. Для того, чтобы проверить это, откройте командную строку, cd в двоичном папке Qt приложения и введите команду:

avrdude -Cavrdude.conf.txt -v -v -v -v -patmega328p -arduino -PCOM7 -b115200 -D -Uflash:w:Blink.cpp.hex:i", 0

ли он работать? Если нет, то какая ошибка вы получили?

Вы также можете использовать функцию error, чтобы получить последнюю ошибку.

+0

Ты прав, чувак, большое спасибо. –

0

Может быть, попробовать this one:

QProcess::execute(/*program*/, /*arguments*/); 
+0

Спасибо, но у меня все еще есть проблема, я думаю, что это может быть что-то связанное с расположением файла exe или что-то в этом роде. Я помещал его в ту же папку с реальным кодом, но он не работает. –

+0

Что такое код возврата? 'int code = QProcess :: execute (...)' возможно, это поможет вам. –

+0

Я получил эту ошибку: C: \ Users \ Vinicius \ OneDrive \ ExpanseSky \ AstropilotFirmwareUpdater \ mainwindow.cpp: 17: ошибка: C2665: «QProcess :: execute»: ни одна из двух перегрузок не могла преобразовать все типы аргументов c: \ qt \ 5.4 \ msvc2013_64 \ include \ qtcore \ qprocess.h (203): может быть 'int QProcess :: execute (const QString &, const QStringList &)' при попытке сопоставления списка аргументов '(const char [8 ], const char [99]) ' –

Смежные вопросы