【问题标题】:Writing commands on linux terminal using Qt使用 Qt 在 linux 终端上编写命令
【发布时间】:2019-05-10 22:53:59
【问题描述】:

我正在尝试让 Qt 创建者通过使用 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

【问题讨论】:

  • cd catkin_ws/devel/lib/submodbus更改为cd /full_path/of/catkin_ws/devel/lib/submodbus
  • 感谢您的回复,但仍然显示未找到
  • 删除system("cd catkin_ws/devel/lib/submodbus"); system("./submodbus_node");并将QProcess::execute("/catkin_ws/devel/lib/submodbus");更改为QProcess::execute("/full/path/of/catkin_ws/devel/lib/submodbus/submodbus_node");
  • 这个 exe 文件用于机器人操作,我目前正在使用名为 submodbus_node 的可执行文件,来自这里 link,但尝试直接从这里打开它没有任何作用,我必须找到它的位置并在控制台中输入 ./submodbus node 来实际运行这个 exe 文件。我已经尝试了您上面的建议,但没有结果
  • 您是否要先更改工作目录然后执行程序?

标签: c++ qt ubuntu-16.04


【解决方案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();
}

【讨论】:

  • 您好,感谢您的回复,我尝试了您的第二种方法,发现QProcess中没有名为setProgram的成员
  • @AvremTan Qt 版本是多少? (不是 QtCreator)。第二个需要 Qt 5.1。
  • 我在 Qt 5.5.1 版上运行它
  • @AvremTan 嗯......这很奇怪。我使用的环境和你一模一样。错误信息是什么?
  • @AvremTan 你能把调用函数的那一行贴出来吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多