这里写目录标题
方法一:(可能会被覆盖)
效果图如下:
水印内容为:sunatmine
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_qt_test.h"
#include <QPainter>
class qt_test : public QMainWindow
{
Q_OBJECT
public:
qt_test(QWidget *parent = Q_NULLPTR);
QPixmap setWaterMask();
private:
Ui::qt_testClass ui;
};
#include "qt_test.h"
qt_test::qt_test(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
QImage _image;
_image.load("C:/Users/zhou/Desktop/Mpeg2decoder/2.jpg");
setAutoFillBackground(true); // 这个属性一定要设置
QPalette pal(palette());
pal.setBrush(QPalette::Window, QBrush(_image.scaled(size(), Qt::IgnoreAspectRatio,
Qt::SmoothTransformation)));
this->setPalette(pal);
QLabel* label = new QLabel;
label->setParent(ui.widget);
label->resize(500,500);
label->setText("######################################");
label->raise();//置于顶层
label->setScaledContents(true);
QImage _image2;
_image2.load("C:/Users/zhou/Desktop/Mpeg2decoder/1.png");//1.png由setWaterMask()生成
label->setPixmap(QPixmap::fromImage(_image2));
label->show();
}
QPixmap qt_test::setWaterMask()
{
QPixmap pix(500, 500);
pix.fill(Qt::white);//白色,因为我的widget没有背景,如果你有背景,请采用transparent透明色
QPainter painter(&pix);
QFont font;
font.setFamily("Microsoft YaHei"); //设置字体 微软雅黑、宋体之类的
font.setPointSize(14); //设置字体大小
font.setItalic(true); //斜体
painter.setFont(font);
painter.setPen(Qt::lightGray);
painter.translate(-pix.width() / 2, pix.width() / 2);
//painter.translate(pix.width() / 2, -pix.width() / 2); //想反斜,请替换这两句
//qreal ang = 45.0; //想反斜,请替换这两句
QFontMetricsF fontMetrics(font);
QString content = "sunatmine";
qreal font_w = fontMetrics.width(content);//字体长度
qreal font_h = fontMetrics.height();//字体高度
qreal ang = -45.0;
painter.rotate(ang);
int project_Y = abs(pix.width() * sin(ang)) + abs(pix.height() * sin(ang));//原图像Y坐标在新坐标系Y轴上的投影长度
int project_X = abs(pix.height()*sin(ang)) + abs(pix.width()*cos(ang));//原图像x坐标在新坐标系x轴上的投影长度
int x_step = 2 * font_w; //这两个变量控制水印之间的距离
int y_step = (3 * font_h);
int rowCount = project_Y / y_step;//水印写多少行
int colCount = project_X / x_step + 2;//水印写多少列 因为旋转了,如果不加2会导致水印缺少一块
for (int r = 0; r < rowCount; r++)
{
for (int c = 0; c < colCount; c++)
{
painter.drawText(x_step * c, y_step * r, content);//写水印
}
}
return pix;
}
方法二:(绝对不会被覆盖)
需要精确label的位置
QLabel* pushb1 = new QLabel;
pushb1->setStyleSheet("background:transparent");
pushb1->setAttribute(Qt::WA_TranslucentBackground);
pushb1->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint | Qt::Tool | Qt::FramelessWindowHint);
pushb1->setText("background:transparent,background:transparent,background:transparent");
pushb1->setGeometry(100,100,100,100);//精确label的位置