Qt设置创建部分半透明,上面控件不透明

时间:2023-03-08 20:29:24
//头文件
#pragma once #include <QWidget>
#include "ui_widgetFullAD.h" class widgetFullAD : public QWidget
{
Q_OBJECT public:
widgetFullAD(QWidget *parent = Q_NULLPTR);
~widgetFullAD(); protected:
virtual bool eventFilter(QObject *watched, QEvent *event);
void paintEvent(QPaintEvent *event);
virtual void mousePressEvent(QMouseEvent *event); private:
Ui::widgetFullAD ui;
};
#include "widgetFullAD.h"
#include <qpainter.h>
widgetFullAD::widgetFullAD(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
setAttribute(Qt::WA_TranslucentBackground, true);
setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint);
//ui.widget->installEventFilter(this);
//installEventFilter(this);
} widgetFullAD::~widgetFullAD()
{
int xx = ;
} bool widgetFullAD::eventFilter(QObject * watched, QEvent * event)
{ return QWidget::eventFilter(watched, event);
} void widgetFullAD::paintEvent(QPaintEvent * event)
{
QPainter painter(this);
painter.fillRect(this->rect(), QColor(, , , )); //QColor最后一个参数80代表背景的透明度
} void widgetFullAD::mousePressEvent(QMouseEvent * event)
{
QRect rt = ui.widget->geometry();
QPoint pt= this->mapFromGlobal(QCursor::pos());//将显示器坐标转换成窗口坐标
if (ui.widget->geometry().contains(this->mapFromGlobal(QCursor::pos())))
{ }
else
{
hide();
}
}

今天遇到一种情况,设置Qt窗口半透明的时候,会把其他的控件全部边半透明了,还有一种情况是透明部分鼠标点击不了。所以找了一个最简单的处理,既然不影响鼠标点击事件,也就可以把背景变成半透明。

Qt设置创建部分半透明,上面控件不透明