防止被截屏
下面是一个简单的示例代码,演示如何设置 Qt 窗口标志来防止被截屏:
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
w.setWindowTitle("Prevent Screen Capture");
w.resize(400, 300);
#ifdef Q_OS_WIN
// 设置窗口标志位,使其不能被截屏
HWND hwnd = static_cast<HWND>(w.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
w.show();
return a.exec();
}
在 Windows 平台上,我们可以使用 Win32 API 来设置窗口标志。以上代码将窗口设置为透明和不透明颜色键,这会使得截屏工具无法捕获窗口内容。
自动添加水印
下面是一个简单的示例代码,演示如何在 Qt 窗口中绘制文本作为水印:
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtGui/QPainter>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
w.setWindowTitle("Add Watermark");
w.resize(400, 300);
w.setAutoFillBackground(true);
QPalette palette = w.palette();
palette.setColor(QPalette::Background, Qt::white);
w.setPalette(palette);
w.show();
QPainter painter(&w);
painter.setPen(Qt::gray);
painter.setFont(QFont("Arial", 36));
painter.drawText(w.rect(), Qt::AlignCenter, "Watermark");
return a.exec();
}
在以上代码中,我们重写了窗口的 paintEvent() 函数,并在其中使用 QPainter 对象绘制文本作为水印。可以根据需要调整字体、颜色、对齐方式等参数,以及绘制其他类型的水印。