防止被截屏
下面是一个详细的 Qt 代码示例,演示如何使用 Qt API 来防止窗口被截屏:
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtGui/QPainter>
#ifdef Q_OS_WIN
#include <Windows.h>
#endif
class MyWidget : public QWidget
{
public:
MyWidget(QWidget* parent = nullptr)
: QWidget(parent)
{
// 设置窗口属性
setWindowTitle("Prevent Screen Capture");
resize(400, 300);
// 防止被截屏
#ifdef Q_OS_WIN
HWND hwnd = static_cast<HWND>(winId());
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED | WS_EX_TRANSPARENT);
SetLayeredWindowAttributes(hwnd, RGB(0, 0, 0), 0, LWA_COLORKEY);
#endif
}
protected:
void paintEvent(QPaintEvent*) override
{
QPainter painter(this);
painter.setPen(Qt::white);
painter.setFont(QFont("Arial", 20));
painter.drawText(rect(), Qt::AlignCenter, "This window is protected.");
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidget w;
w.show();
return a.exec();
}
在以上代码中,我们创建了一个 QWidget 子类 MyWidget,在其构造函数中设置窗口属性和防截屏。
要防止窗口被截屏,我们需要使用系统调用设置窗口的扩展风格,使其变成透明和颜色键(Color Key)。在 Windows 平台上,我们需要使用 Win32 API 来实现,而在 Linux 和 macOS 上则需使用不同的方法。
自动添加水印
下面是一个详细的 Qt 代码示例,演示如何使用 QPainter 在窗口上添加文本水印:
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtGui/QPainter>
class MyWidget : public QWidget
{
public:
MyWidget(QWidget* parent = nullptr)
: QWidget(parent)
{
// 设置窗口属性
setWindowTitle("Add Watermark");
resize(400, 300);
}
protected:
void paintEvent(QPaintEvent*) override
{
QPainter painter(this);
// 绘制文本水印
painter.setPen(Qt::gray);
painter.setFont(QFont("Arial", 20));
painter.drawText(rect(), Qt::AlignCenter, "Watermark");
// 绘制图片水印(可选)
QImage image(":/images/watermark.png");
QRectF targetRect(width() - image.width() - 10, height() - image.height() - 10,
image.width(), image.height());
painter.drawImage(targetRect, image);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidget w;
w.show();
return a.exec();
}
在以上代码中,我们重写了 QWidget 的 paintEvent() 函数,在其中使用 QPainter 对象来绘制文本或图片作为水印。
对于文本水印,我们可以设置画笔颜色、字体和对齐方式等参数,然后调用 QPainter 的 drawText() 函数来绘制文本。
对于图片水印,我们可以加载一个 QImage 对象,并使用 QRectF 类型的 targetRect 变量来指定图片位置和大小,然后调用 QPainter 的 drawImage() 函数来绘制图片。