- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在我们的项目中我们有三个独立的应用程序,我们要开发一个QT控件应用程序来控制这三个应用程序。主窗口将分为三个子窗口 - 每个子窗口显示另一个应用程序。
我想用 QX11EmbedWidget和 QX11EmbedContainer小部件,但有两个问题:
所以我不知道是否使用它 - 我很乐意得到答案。
另外,我看到 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/
我是一名优秀的程序员,十分优秀!