c++ - 使用 Qt 在 linux 终端上编写命令

标签 c++ qt ubuntu-16.04

我正在尝试让 Qt Creator 通过使用 UI 上的按钮将用户输入打印到终端中。截至目前,该代码可通过人工输入在终端上执行。这是代码:

  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

最佳答案

system 无法全局更改当前目录。但可以这样使用:

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

或使用 QProcess::setProgramQProcess::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");

测试demo,在父目录下创建三个文件:

#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();
}

关于c++ - 使用 Qt 在 linux 终端上编写命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53698908/

相关文章:

c++ - 颠覆 "Working copy locked"问题

c++ - g++ 4.4.7 -std=gnu++0x 应该编译 "for each"构造吗?

c++ - 模板元编程可以用来加密编译时常量数据吗?

qt - Qt 是否会在构建时使其自己的库的数字签名失效?

C++ Qt WriteProcessMemory

c++ - 在 Qt 中设置应用程序主题

c# - 在应用程序依赖项 list 中指定的程序集

c++ - 仅在 x64 版本中存在访问冲突

linux - 如何在 ubuntu 16.04 中安装 laravel 5.6?

MySQL 从 5.7 升级到 8.0 失败,在步骤 EXEC 生成 mysql-systemd-start 时失败