gpt4 book ai didi

c++ - QT 如何将应用程序嵌入到 QT 小部件中

转载 作者:可可西里 更新时间:2023-11-01 16:30:10 24 4
gpt4 key购买 nike

在我们的项目中我们有三个独立的应用程序,我们要开发一个QT控件应用程序来控制这三个应用程序。主窗口将分为三个子窗口 - 每个子窗口显示另一个应用程序。
我想用 QX11EmbedWidgetQX11EmbedContainer小部件,但有两个问题:

  1. QX11Embed* 基于 X11 协议(protocol),我不知道它是否受 Windows 操作系统等非 x11 系统的支持。
  2. 自 QT 5 以来,这些类不存在,QT 文档也没有提及原因。

所以我不知道是否使用它 - 我很乐意得到答案。
另外,我看到 QT 5.1 包含 QWidget::createWindowContainer();功能,在某些帖子中它看起来应该是 X11Embed 的替代品。谁能详细解释一下我如何使用此函数创建一个 QT 小部件,该小部件将在其内部运行另一个应用程序(例如计算器)?

我在 Google 中搜索了很多,但没有找到我的问题的答案。
谁能帮帮我吗?我走的路对吗?
谢谢!

最佳答案

如果所有三个独立的应用程序都是用 Qt 编写的,并且您有它们的源代码,那么您应该能够通过 Qt 中 GUI 对象的父子关系将它们统一起来。

http://qt-project.org/doc/qt-4.8/objecttrees.html

http://qt-project.org/doc/qt-4.8/widgets-and-layouts.html

http://qt-project.org/doc/qt-4.8/mainwindows-mdi.html

如果您无法以这种方式访问​​它们,那么您所说的就像第 3 方窗口管理一样。这有点像编写一个 shell,比如 Windows Explorer,它可以操纵其他窗口应用程序的状态和大小。

在 Windows 上使用 Spy++ 或 AutoIt Spy 之类的程序,以及在其他操作系统上使用类似的程序,了解您要控制的窗口的识别标记,例如类、窗口标题等。或者您可以启动 exe你自己处于 QProcess::startDetached() 之类的事情中。

http://qt-project.org/doc/qt-5.1/qtcore/qprocess.html#startDetached

然后使用依赖操作系统的调用控制窗口。 Qt 库没有为第三方窗口内置这些东西,只为您启动的 QApplication 下的那些内置。 AutoHotKey 或 AHK 有很多这样的例子。它是一种脚本语言,用于在 Windows 环境中自动化很多事情,并且还有用于 Mac 的端口(尽管我自己还没有尝试过 mac 端口)。

所以最后你可能会通过这样的调用来寻找你的窗口:

#include <windows.h>

HWND hwnd_1 = ::FindWindow("Window_Class", "Window Name");
LONG retVal = GetWindowLongA(hwnd_1, GWL_STYLE); // to query the state of the window

然后像这样操作窗口的位置和状态:

::MoveWindow(hwnd_1, x, y, width, height, TRUE);
::ShowWindow(hwnd_1, SW_SHOWMAXIMIZED);

如果您为您正在操作的窗口正确设置窗口标志,您甚至可以在您正在控制的窗口之上绘制小部件。

transparent QLabel with a pixmap

Cannot get QSystemTrayIcon to work correctly with activation reason

在执行所有这些操作时,Windows 中出现的一些问题是,当 Windows UI 设置的显示缩放比例与您预期的不同时,发现 Windows UI 的怪癖,以及您是否想与任务栏一起玩得开心,以及处理您正在操作的程序的所有模态窗口。

总的来说,这是可行的。 Qt 将为执行这些命令提供一个很好的界面,但最终您需要做大量的工作和调试,才能将它放在一个漂亮、可靠的窗口管理器中。

希望对您有所帮助。

关于c++ - QT 如何将应用程序嵌入到 QT 小部件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18472840/

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