QT 无法在屏幕上绘制框(QRect 和 QRubberBand)

QT Unable to draw box on screen (QRect and QRubberBand)

我正在尝试用 C++ 编写一个工具来帮助我学习语言。它将捕获屏幕上的一个区域(单词或句子),处理文本,然后在 GUI 应用程序中显示有关捕获文本的信息。

这是我正在尝试做的事情的基本图表:

这应该与 Windows 上的 gnome-screenshot 和 Microsoft 的截图工具等屏幕捕获工具非常相似。

第三方应用程序类似于包含可扫描文本的 pdf 查看器或图像查看器。我的应用程序显示有关捕获的文本的信息。我的应用程序还在屏幕上绘制了一个可调整大小的 'capture window',如图中单词周围的红色框所示。

我的问题是关于在屏幕上绘制这个红色框。如何在屏幕上绘制一个红色框?我一直在尝试用 xLib 和 QT 来做这件事,尽管我更愿意用 QT 来做,因为它有更好的文档记录和跨平台。

编辑:我修改了问题,使它对我的 objective 来说更简洁明了,以及接受的答案如何解决我的问题。

您需要创建一个包含小部件的无框架、alwaysOnTopwindow。 window 应定义为具有半透明背景,而小部件将用于显示边框(或半透明背景)。然后,您可以通过检测鼠标点击打开 pdf 的 window 来通过代码操纵 window 的位置和大小。

这是一个例子:

代码:

QMainWindow window;
window.setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
window.setAttribute(Qt::WA_TranslucentBackground, true);
window.setFixedSize(80, 20);
window.move(500,500);

QWidget widget(&window);
widget.setStyleSheet("border: 3px solid rgb(255,0,0)");

window.setCentralWidget(&widget);
window.show();

接受的答案是这个问题的首选解决方案,但在回答这个问题后,我找到了一个示例项目,它完成了我使用 xlib 的目标。

https://github.com/gvalkov/xrectsel

为了完整起见,我将其包括在内,但 QT 解决方案更好 API 并且是跨平台的。所以,这更适合我对这个程序的需求。