gpt4 book ai didi

c++ - 我应该如何将其他系统级后台例程与 Qt 应用程序一起添加?

转载 作者:太空宇宙 更新时间:2023-11-04 12:53:49 29 4
gpt4 key购买 nike

我创建了两组头文件和源文件,它们使用 libxdo 读取全局鼠标指针坐标(Qt5 无法读取)并计算速度从数学上讲,当鼠标指针的速度高于阈值时,它应该显示唯一的 Qt 窗口。
另一组标题和源代码抓取( Hook )并监听全局键盘事件,当按下组合键时,项目在后台运行,Qt 窗口(在我将其集成后)被隐藏。在我按下 [ESC] 之前,我输入的任何内容都会存储在一个文件中。
现在 Qt 窗口应该只在我将鼠标指针移动到一定速度以上时出现,并且文本应该显示在那里。
如果我在打字时移动鼠标,窗口应该出现并且我可以看到正在 QWindow 中写入的文本。但是当我再次移动鼠标时,它应该被隐藏了。

我没有为 qt5 使用 libqxt,上面的程序应该一直运行,直到我 logout 系统。使用 Ubuntu 16.04
我在 main.cxx 中这样尝试:

#include <QApplication>
#include "mainwindow.hpp"
#include <QDesktopWidget>
#include <QMetaObject>
int main(int argc, char *argv[]) {

QApplication app(argc, argv);

MainWindow window;

int width = QApplication::desktop()->width(), height = QApplication::desktop()->height();

window.setGeometry ((width - 0.75 * width),height - 20, (width/2) , 10);
window.setWindowFlags (Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
window.hide();
QMetaObject::invokeMethod( this, "keygrab", Qt::QueuedConnection, Q_ARG() );
QMetaObject::invokeMethod( this, "mousevelocity", Qt::QueuedConnection, Q_ARG() );
return app.exec();
}

但是我完全搞砸了这个 Qt 应用程序的 mainwindow.cxx 中的 libx11 和 libxdo 成员和函数,我不知道会发生什么最好的方法而不是这个,或者如果它是最好的,我有一个问题,因为我有多个主要功能,对于抓键和鼠标指针有多个无限循环。我无法从 Qt 应用程序的主体调用它们,甚至上面的代码也会先运行应用程序然后调用它们,但我需要相反的方式。附言抱歉,第一次来。

最佳答案

我不是 100% 确定我理解你的问题,但根据问题的标题和一些评论,这里有一些提示:

  1. Qt 可以知道当前的全局鼠标位置。你用谷歌搜索过吗?我发现以下内容:QCursor::pos()

  2. 要捕获全局键盘事件,您必须将键盘焦点提供给小部件。否则,纯 Qt 无法捕获全局键盘事件。我假设你可以通过一个小的透明 QWidget 来做到这一点,它在一个循环中给自己键盘焦点,然后从不捕获任何事件(所以它们被传递给其他程序),但我从来没有测试了 YMMV。

  3. 要创建“系统级后台例程”,您必须启动 daemon process .为此,我建议您查看 documentation QProcess 和 friend 的例子。基本上你在启动你的应用程序时所做的,应用程序使用一个特殊的命令行参数启动它自己的第二个实例,告诉第二个子进程进入后台。然后父进程退出,留下子进程在后台运行。

  4. 此守护进程将在事件循环中运行它需要的任何代码,这是 Qt 程序的方式。每当它收到值得注意的事件时,您都可以根据自己的喜好处理这些事件并采取行动。如果您需要从非 Qt 上下文获取事件,只需创建一个 QTimer 并轮询您需要的事件接口(interface)。

  5. 事件发生后,您可以在屏幕上您想要的确切位置显示 QWidgets(howto here)。

  6. 一旦您的守护进程开始工作,下一步就是弄清楚如何部署它。大多数守护进程需要作为服务安装到操作系统中,以便它们在启动时可靠地启动。每个窗口环境都可能有自己的这种“运行直到注销”部署。如果您特别喜欢,程序本身可能会在它 fork 之前执行所需的部署例程,这使得它可以即​​插即用。

关于c++ - 我应该如何将其他系统级后台例程与 Qt 应用程序一起添加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47670254/

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