gpt4 book ai didi

c++ - 有什么方法可以判断 fork /执行的 Qt 应用程序的主窗口何时显示?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:34 24 4
gpt4 key购买 nike

我有一个启动器应用程序,当用户单击相关图标时,它会forkexec Qt 应用程序。

对于视觉反馈,我想在用户选择图标时显示一个等待光标,直到请求的应用程序的主窗口出现在屏幕上。

void RocketLauncher::onItemSelect(QListWidgetItem* item)
{
QApplication::setOverrideCursor(Qt::WaitCursor);

const AppConfig& app = getAppConfig(item);

forkAndExec(app.cwd(), app.cmd(), app.args(), app.env());

// TODO: wait until app's main window is being displayed

QApplication::restoreOverrideCursor();
}

我遇到的问题是,在我的启动器应用程序中,我立即从 fork 取回了子进程的 pid,但是子进程仍然需要一些时间才能 exec 并使其主窗口显示在屏幕上。

因此,我对 QApplication::restoreOverrideCursor() 的调用会立即执行,并且不会向用户显示应用程序仍在启动的视觉提示。

有什么方法可以让我收到 child 正在运行的信号?

最佳答案

我可以看到两种实现方式:

  1. 具有显式的进程间通信。子应用程序可以在其主窗口创建后通知启动器应用程序,例如通过 DBus 调用、标准输出、共享内存或任何其他可用的 IPC 机制。有一个 startup notification library适用于通过传递 X 消息使用显式 IPC 的 X11,由 KDE 和 GNOME 使用。

  2. 根据操作系统和其中使用的窗口管理器,您可以向窗口管理器请求已打开窗口的列表,并在创建新窗口时收到通知。我认为没有 Qt API,您需要使用特定于平台的代码。对于 X11,您将执行类似于 xwininfo 的操作程序。此外,还有一个 LGPL 许可的 KDE 框架 API,称为 KWindowSystem。 ,它有一个 windowAdded 信号。我没有检查这实际上是在哪些平台上实现的,文档建议至少 X11 和 Mac OS。

关于c++ - 有什么方法可以判断 fork /执行的 Qt 应用程序的主窗口何时显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36094277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com