我让自己发疯,试图在屏幕上画一个简单的盒子。我希望有人能解释我如何完成我想做的事情。
我正在尝试用C ++写一个工具,这将对我的语言学习有所帮助。它将捕获屏幕上的一个区域(单词或句子),处理文本,然后在GUI应用程序中显示有关捕获的文本的信息。
这应该与gnome-screenshot和Microsoft在Windows上的截图工具之类的屏幕捕获工具非常相似。
第三方应用程序类似于包含可扫描文本的pdf查看器或图像查看器。我的应用程序显示有关捕获的文本的信息。我的应用程序还在屏幕上绘制了一个可调整大小的“捕获窗口”,图中用红色的框包围了单词。
绘制此红色框一直是我过去几周的祸根。所以,我的问题是,人们到底应该怎么做?
我尝试过的事情
我尝试了Xlib,GTK +和QT。
我无法让GTK为我工作,我无法编译示例。安装库时可能出现用户错误。
Xlib很复杂,级别很低,并且不是跨平台的,因此在获得基本窗口后停止在此处尝试。
QT是跨平台的,并且有据可查,因此似乎是一个不错的选择。我将最大的精力用于弄清QT。我与QT有关的问题是,它似乎无法在屏幕上画一个框。我只能在主应用程序或父窗口小部件内绘制框。因此,我似乎不认为QT将支持我在上面的基本图中所做的工作。
所以,我问如何才能做到这一点。我是GUI的新世界,所以我真的不明白要实现自己的想法我需要做什么,更不用说如何正确地做了。
[我主要使用Linux,但我的目标是跨平台最终产品(因此,我专注于QT)。
所以,请帮助我。这应该如何工作?我缺少什么信息?
您需要创建一个包含小部件的无框架,alwaysOnTop窗口。窗口应定义为具有半透明背景,而小部件将用于显示边框(或半透明背景)。然后,您可以通过代码来控制窗口的位置和大小。
这里是一个例子:
代码:
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();