找回密码
 立即注册
收起左侧

QProcess无法找到最新的文件

0
回复
1814
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2024-5-12 11:01:24 显示全部楼层 |阅读模式
4Qter豆
在下面的代码中,我通过信号槽实现了点击按钮page2_btn1,创建yaml文件,并连接文件夹改变信号,随后自动触发该信号对应的槽,
在调用的reconnect()函数中可以通过dir找到最新的文件名称filename,但是通过QProcess类调用终端命令修改该文件时,
却无法找到对应的最新的文件(QProcess命令行是正确的,通过system命令行却可以找到)。请问大佬们是什么原因呢,该如何解决?

connect(page2_btn1,&QPushButton::clicked,[=](){

        /*
                创建yaml文件的代码       
        */

        // 当point_yaml文件夹中的文件改变后,触发文件更新
        connect(watcher, &QFileSystemWatcher::directoryChanged, [=](){
            qDebug() << "Directory changed:" << dirPath;
            reconnect(watcher);
        });

});

void reconnect(QFileSystemWatcher* watcher)
{
    qDebug()<<"断开与重连";
    disconnect(watcher, &QFileSystemWatcher::directoryChanged,0,0);

    // 提取点位文件中的坐标信息
    QProcess* process2 = new QProcess;
    QString dirPath = "/home/robot/桌面/gazebo/cafe_robot_ws/src/proc_yaml/point_yaml_file";

    // 获取最新添加的文件信息
    QDir dir(dirPath);
    dir.refresh();
    QStringList files = dir.entryList(QDir::Files, QDir::Time);
    QFileInfo info(files[0]);
    QString filename = info.baseName();
    qDebug()<<filename;

    // 从点位数据中提取所需位置数据
    process2->setWorkingDirectory(dirPath);
    process2->start("bash");
    process2->waitForStarted();
    QString qstr1 = QString::fromUtf8("gedit ");
    QString qstr2 = QString::fromUtf8(".yaml\n");
    QString cmdname = qstr1+filename+qstr2;
    const char* cstr = cmdname.toUtf8().constData();
    process2->write(cstr);

}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了