Написание команд на терминале Linux с использованием Qt - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь заставить создателя Qt напечатать пользовательский ввод, используя кнопку на пользовательском интерфейсе в терминале.На данный момент код исполняется на терминале через человеческий ввод.Вот код:

  void MainWindow::on_pushButton_clicked()
{
    QProcess::execute("/catkin_ws/devel/lib/submodbus");

    system("cd catkin_ws/devel/lib/submodbus");
    system("./submodbus_node");

}

Токовый выход при использовании кода

Выход с помощью человеческого ввода

Версии, на которых я работаю: -Ubuntu 16.04 -QT Creator 3.5.1

1 Ответ

0 голосов
/ 10 декабря 2018

system не может изменить текущий каталог глобально.но можно использовать так:

system("cd /catkin_ws/devel/lib/submodbus && ./submodbus_node");

или используя QProcess :: setProgram с QProcess :: setWorkingDirectory

QProcess p;
p.setProgram("submodbus_node");
//p.setArguments(QStringList()<<args); // if you need
p.setWorkingDirectory("/catkin_ws/devel/lib/submodbus");
p.start();

или QDir :: setCurrent

QDir::setCurrent("/catkin_ws/devel/lib/submodbus");
QProcess::startDetached("submodbus_node");

Тестовая демонстрация, создайте три файла в родительском каталоге:

#include <QApplication>
#include <QProcess>
#include <QDir>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    system("cd ../ && touch test1.txt");

    QProcess p;
    p.setProgram("touch");
    p.setArguments(QStringList()<<"test2.txt");
    p.setWorkingDirectory("../");
    p.start();

    QDir::setCurrent("../");
    QProcess::startDetached("touch test3.txt");

    return a.exec();
}
...