16,759
社区成员




在下面的代码中,我通过信号槽实现了点击按钮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);
}