在触发操作中使用system()时,C ++ QT QFileDialog不会关闭

时间:2014-06-27 03:53:49

标签: c++ qt system qfiledialog

void OBJ_Loader::on_actionOpen_triggered()
{
QString filename = QFileDialog::getOpenFileName(this, tr("Open a File"));
if (!filename.isEmpty()) {
    filepath=filename.toUtf8().constData();

    command.append(filepath);
    int TempNumOne=command.size();
    for (int a=0;a<=TempNumOne;a++) { //get letters to a char list so it can be used by system();
                cmd[a]=command[a];
    }
    openfile=true;

    if (openfile) {
        openfile=false;
        system(cmd);
    }
}

}

系统时(cmd);被称为QFileDialog窗口在系统命令完成之前不会关闭。我想知道点击打开后是否可以关闭搜索窗口。

1 个答案:

答案 0 :(得分:1)

system函数阻止事件循环:用户交互需要运行事件循环,并在代码未运行时运行。由于system调用位于您的代码中,因此您不能简单地阻止您的进程。您需要使用QProcess,因为它具有异步接口。 This answer提供了一个调用自身的进程的完整示例 - 所有进程都是从单个可执行文件中完成的。