最近要实现一个半透明蒙层的护眼模式,因此需要实现一个半透明的QFrame,记录一下方法
直接上代码
// myframe.h
#ifndef MYFRAME_H
#define MYFRAME_H
#include <QFrame>
#include <QPixmap>
class MyFrame : public QFrame
{
Q_OBJECT
public:
explicit MyFrame(QWidget *parent = 0);
protected:
virtual void paintEvent(QPaintEvent * e) override;
signals:
public slots:
private:
QPixmap _pixmap;
};
#endif // MYFRAME_H
// myframe.cpp
#include "myframe.h"
#include <QPainter>
MyFrame::MyFrame(QWidget *parent) : QFrame(parent)
{
setWindowFlags(Qt::FramelessWindowHint |
Qt::BypassGraphicsProxyWidget |
Qt::Tool | // 隐藏任务栏图标
Qt::WindowDoesNotAcceptFocus | // 防抢焦
Qt::WindowTransparentForInput | // 鼠标、键盘穿透
Qt::WindowStaysOnTopHint
);
setAttribute(Qt::WA_TranslucentBackground);
_pixmap.load(":/image/image/grid.png");
showFullScreen();
}
void MyFrame::paintEvent(QPaintEvent *e)
{
Q_UNUSED(e)
QPainter p(this);
p.drawPixmap(0,0,width(),height(), _pixmap);
}
效果如下: