首页 文章

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

提问于
浏览
1

我试图通过使用UI上的按钮进入终端来让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 回答

  • 3

    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");
    

    测试演示,在父目录中创建三个文件:

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

相关问题