1. 程式人生 > >Qt設定建立部分半透明,上面控制元件不透明

Qt設定建立部分半透明,上面控制元件不透明

//標頭檔案
#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 = 343; } 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(0, 0, 0, 150)); //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視窗半透明的時候,會把其他的控制元件全部邊半透明瞭,還有一種情況是透明部分滑鼠點選不了。所以找了一個最簡單的處理,既然不影響滑鼠點選事件,也就可以把背景變成半透明。