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

问题描述 投票:0回答:2

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

这是我要执行的操作的基本示意图:enter image description here

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

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

我的问题是关于在屏幕上绘制此红色框。如何在屏幕上绘制红色框?我一直在尝试使用xLib和QT进行此操作,尽管我更愿意使用QT进行此操作,因为它具有更好的文档说明和跨平台知识。

编辑:我修改了问题,以使其对我的目标更加简洁明了,以及所接受的答案如何解决我的问题。

c++ qt user-interface screenshot xlib
2个回答
1
投票

您需要创建一个包含小部件的无框架,alwaysOnTop窗口。窗口应定义为具有半透明背景,而小部件将用于显示边框(或半透明背景)。然后,您可以通过检测打开PDF的窗口上的鼠标单击,通过代码来控制窗口的位置和大小。

这里是一个例子:

demo image

代码:

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();

1
投票

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

https://github.com/gvalkov/xrectsel

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

© www.soinside.com 2019 - 2024. All rights reserved.