Qt 执行外部程序
Qt Execute external program
我想从我的QT程序启动一个外部程序。唯一有效的解决方案是:
system("start explorer.exe");
但它仅适用于 Windows 并启动命令行片刻。
我尝试的下一件事是:
QProcess process;
QString file = QDir::homepath + "file.exe";
process.start(file);
//process.execute(file); //i tried as well
但什么也没发生。有什么想法吗?
如果你的process
对象是堆栈上的变量(例如在方法中),代码将无法按预期工作,因为你已经开始的进程将在方法完成后在QProcess
的析构函数中被杀死。
void MyClass::myMethod()
{
QProcess process;
QString file = QDir::homepath + "file.exe";
process.start(file);
}
相反,您应该像这样在堆上分配QProcess
对象:
QProcess *process = new QProcess(this);
QString file = QDir::homepath + "/file.exe";
process->start(file);
如果您希望程序在进程执行时等待并且只需要获取其退出代码,则可以使用
QProcess::execute(file);
QProcess::exitCode(); // returns the exit code
而不是像这样异步使用进程。
QProcess process;
process.start(file);
请注意,您还可以阻止执行,直到进程完成。为了做到这一点,请使用
process.waitForFinished();
过程开始后。
QDir::homePath 不以分隔符结尾。可执行文件的有效路径
QString file = QDir::homePath + QDir::separator + "file.exe";
只需使用 QProcess::startDetached
; 它是静态的,你不需要担心等待它完成或在堆上分配东西或类似的东西:
QProcess::startDetached(QDir::homepath + "/file.exe");
它是QProcess::execute
的分离对应物.
截至 5.15,该表单已经过时(但仍然存在)。新的首选调用与上述调用相同,但第二个参数QStringList
命令行参数。如果您没有任何要传递的参数,只需传递一个空列表。
相关文章:
- 具有外部"c"和程序集的未定义函数
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
- 将 c++ 生成器应用程序与外部 dll 结合使用
- c ++控制台应用程序,如何在控制台外部打印字符
- 将控制台应用程序直接输出到Visual Studio而不是外部Windows控制台中
- 如何运行外部程序,向其传递内存地址以读取/写入?
- Q不运行外部应用程序
- C++外部程序的输入和输出管道
- C++ 为什么在定义的编译和链接之前引用外部实例的程序
- 如何在gedit中使用外部工具运行交互式C++程序
- 程序终止索引外部
- Windows7+:如何构建不需要任何额外/外部运行时库的C++ Windows 控制台应用程序?
- 从 WebAssembly 运行外部应用程序
- 将文件拖放到 Qt5 应用程序外部
- 如果在应用程序外部取消拖动
- 检查文件是否在应用程序外部被修改
- 将应用程序外部的文件拖放到QTableView中
- 在Qt中获取应用程序外部的键盘事件
- 更改Xcode c++应用程序外部文件位置